Verwenden Sie Ihre Workday-Zugangsdaten für Adaptive Planning-API-Anforderungen
Einige Links in diesem Artikel führen zur Workday Community. Wenn Sie kein Community-Konto haben, können Sie hier eines beantragen.
Mit Workday synchronisierte Benutzer, die sich bei Workday anmelden und die verwenden
Adaptive Planning
Worklet kann ausgeführt werden Adaptive Planning
öffentliche APIs. Benutzer müssen speziell für diese API-Anforderungen einen ISU erstellen. Diese Benutzer müssen ein Token in bereitstellen credentials
Element von Adaptive Planning
API-Anforderungen anstelle eines Benutzernamens und Kennworts. Sie können dieses Token im Cache speichern und verwenden, bis es abläuft. Nach Ablauf des Ablaufs müssen Sie ein neues Token anfordern.
Voraussetzungen
Voraussetzungen
Workday-Domäne und Sicherheitsgruppen
- Vergewissern Sie sich, dass die ISU-Benutzer, die API-Zugriff benötigen, Teil der SicherheitsdomäneSet Up: Adaptive Planning API Accesssind.
Workday-Setup-Aufgaben
- Vergewissern Sie sich, dass auf dem RegisterBenutzeranmeldungin die Aufgabenfür Single Sign-Onaktiviert sindAdaptive PlanningRegister
- Vergewissern Sie sich, dass dieSetup-Aufgabe Öffentliche APIauf dem RegisterÖffentliche APIin aktiviert istAdaptive PlanningRegister
- Verifizieren Sie, dass eine Setup-Aufgabe für einen Integrationssystembenutzer (ISU) einen ISU speziell für Anforderungen an die Workday Adaptive Planning API erstellt und ihn mit einem gemappt hatAdaptive Planning-Benutzerkonto.
Adaptive Planning
Benutzeradministrator- Vergewissern Sie sich, dass der ISU mit beginntPublicAPIISU_in der Liste „Benutzer“ unter Verwaltung > Benutzer.
- Vergewissern Sie sich, dass dieser Benutzer den Ebenenzugriff hat, der für die APIs erforderlich ist, die er ausführen möchte. Neue ISUs erhalten standardmäßig nicht den Ebenenzugriff.
Schritte
Schritte
- Rufen Sie ein Zertifikat ab und extrahieren Sie Ihren öffentlichen Schlüssel.
- Registrieren Sie einen API-Client in Workday mit diesem Zertifikat.
- Generieren Sie ein JWT-Token, rufen Sie Access_token von Workday ab und rufen Sie AdaptiveAPIAccessToken ab.
- Verwenden Sie das AdaptiveAPIAccessToken in einemAdaptive PlanningAPI-Anforderung.
Rufen Sie ein Zertifikat ab und extrahieren Sie Ihren öffentlichen Schlüssel
Sie können ein Zertifikat selbst erstellen oder bei einer bekannten Zertifizierungsstelle erwerben. Details zu den Parametern, die für Ihr X.509-Zertifikat in Workday benötigt werden, finden Sie unter Konzept: X.509-Zertifikate in Workday.
- Extrahieren Sie den öffentlichen Schlüssel aus Ihrem Zertifikat, um ihn in Workday hochzuladen.
- Behalten Sie Ihren privaten Schlüssel für die Verwendung in Ihrer aufrufenden Anwendung.
- Fügen Sie das Zertifikat bei der Registrierung Ihres JWT-Bearer-Token in Workday ein. Referenzieren Sie Ihren privaten Schlüssel in Ihrem Skript.
Registrieren Sie einen Workday-API-Client
- Registrieren Sie einen API-Client mitder Client-Gewährungsart: JWT Bearer Grantin Workday. Weitere Informationen finden Sie unter API-Client registrieren .
- Kopieren Sie den für Ihr Zertifikat abgeleiteten öffentlichen Schlüssel in dasx.509-Zertifikatauf der Seite Register API Client in Workday.
- Für„Set Scope (Functional Area)“.Adaptive Planning
- Wenn Sie die Registrierung des API-Clients abgeschlossen haben, kopieren Sie die resultierenden Felder unten auf der Seite in eine Textdatei, um sie später zu verwenden.
- Workday-REST-API-Endpunkt
- Token-Endpunkt
- Autorisierungsendpunkt
JWT-Token generieren, Zugriff auf Workday abrufen und AdaptiveAPIAccessToken abrufen
- Verwenden Sie Ihren privaten Schlüssel und generieren Sie das JWT-Token, indem Sie den unten aufgeführten Pseudocode ausführen.
- Um ein Workday-Zugriffs-Token abzurufen, erstellen Sie einPOSTDie Anforderung an den Token-Endpunkt wird übergebengrant_typeundassertion. Verwenden Sie den Token-Endpunkt, der nach der Registrierung Ihres API-Clients in Workday kopiert wurde. Beispiel für Token-Endpunkt:https://{host or gateway}/ccx/oauth2/{tenant}/tokenBeispielCURL-Anforderung an den Token-Endpunktcurl --request POST 'https://{host or gateway}/ccx/oauth2/{tenant}/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' \ --data-urlencode 'assertion={{the jwt assertion from your certificate}}'
- Rufen Sie AdaptiveAPIAccessToken ab, indem Sie den Workday-Endpunkt mit dem Workday-Zugriffs-Token aufrufen. Verwenden Sie die vorherigeaccess_tokenWert als Bearer-Token inAuth-Header dafürGET.Beispiel für Zugriffs-Token:https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessTokenBeispielCURL-Anforderung für AdaptiveAPIAccessToken:curl --request GET 'https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken' \ --header 'Authorization: Bearer {{the prior access_token value}}' \ --data-raw ''
- Rufen Sie die anAdaptive PlanningAPI mithilfe von AdaptiveAPIAccessToken im Element credentials von XML in einem HTTPPOST. Beispiel:curl -H "Content-Type: text/xml" -d '<?xml version='1.0' encoding='UTF-8'?><call method="exportLevels" callerName="a string that identifies your client application"><credentials token="ID eyJhbDci0iJSUzUxMiIsUmtpZCI6IdvcmtkYXlfa2V5In0.eyJpc3KiOiJXb3JrZGFZIiwiYXV0aF90aW1lIjoxNTczMTY3NjU2LBjzeXnfynnJd.bztQzBmHeTj1amnHA-r96TdrJK0MXMghUFF1KyjxqIq6ruHU63dJp3JAJn3Eche7SEcoZBVGX4wJgna106pmCqgrrVWMf13Hg_sb_szabal2XN1KEEk1qh8z1IDlbt6qJIL_xyW3J2nNSs5ima3vJUYU5sRQXwXst0GuFWXpy464GyB4oKcscrg28X3dnPO_ytdohMKHsWkqyHQKXFQwoQezFaGy10sp4RRUj0lpOZX8C9oBHDYA58IXxGkqKLJVNPvDND6rGY5fTHQ-yxpe1nz-WqB0boiq9a-dv8b3EBzbelxj2fCPdMbng6kzygDcA2at_7BNQiyzfIovS5AG"/><include versionID="3" inaccessibleValues="false"/><sheet id="3" /></call>' -X POST https://api.adaptiveplanning.com/api/v23
Java-Beispielanwendung zum Generieren eines JWT-Tokens
Diese Java-Beispielanwendung generiert ein JWT-Token.
//********************************************************************** // // File: TestPublicAPISample.java // // Copyright 2004-2019 Workday Adaptive Planning. // All Rights Reserved. // // This work contains trade secrets and confidential material of // Workday Adaptive Planning and its use or disclosure in whole or in part // without the express written permission of Workday Adaptive Planning is prohibited. // //********************************************************************** import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.Signature; import java.text.MessageFormat; //import java.util.Base64; import org.apache.commons.codec.binary.Base64; public class AccessAdaptiveAPI { public static void main(String args[]) { String jwtKeyStoreFileString = "/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home/jre/lib/security/JWTkeystore.jks"; String clientIDString = "BlywNDM1NmMtZTk2Mi00NTZiTWEyZjktZWM1NGJiOGQ3Yjca"; String userIdString = "PublicAPIISU_Test"; System.out.println(GetAccessToken(clientIDString,userIdString,jwtKeyStoreFileString)); } public void callAPI() { } public String getAdaptiveAPIToken() { return ""; } public String getJWTToken(String privateKey, String username) { return ""; } public void callWorkdayAPI() { } public static String GetAccessToken(String clientId, String userId, String jwtKeyStore) { String header = "{\"alg\":\"RS256\",\"typ\":\"JWT\"}"; String claimTemplate = "'{'\"iss\": \"{0}\", \"sub\": \"{1}\", \"aud\": \"{2}\", \"exp\": \"{3}\"'}'"; try { StringBuffer token = new StringBuffer(); //Encode the JWT Header and add it to our string to sign token.append(Base64.encodeBase64URLSafeString(header.getBytes("UTF-8"))); //Separate with a period token.append("."); //Create the JWT Claims Object String[] claimArray = new String[4]; //iss claimArray[0] = clientId; //sub claimArray[1] = userId; //aud claimArray[2] = "wd"; //exp claimArray[3] = Long.toString( ( System.currentTimeMillis()/1000 ) + 300); MessageFormat claims; claims = new MessageFormat(claimTemplate); String payload = claims.format(claimArray); //Add the encoded claims object token.append(Base64.encodeBase64URLSafeString(payload.getBytes("UTF-8"))); //token.append(Base64.encodeBase64URLSafeString(payload.getBytes("UTF-8"))); //Load the private key from a keystore KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(new FileInputStream(jwtKeyStore), "Workday123!".toCharArray()); PrivateKey privateKey = (PrivateKey) keystore.getKey("Workday", "Workday123!".toCharArray()); //Sign the JWT Header + "." + JWT Claims Object Signature signature = Signature.getInstance("SHA256withRSA"); signature.initSign(privateKey); signature.update(token.toString().getBytes("UTF-8")); String signedPayload = Base64.encodeBase64URLSafeString(signature.sign()); //Separate with a period token.append("."); //Add the encoded signature token.append(signedPayload); return token.toString(); //System.out.println(token.toString()); } catch (Exception e) { e.printStackTrace(); } return ""; } }
C#-Beispielanwendung zum Generieren eines JWT-Tokens
Diese C#-Beispielanwendung generiert ein JWT-Token, das username und password im Element credentials von ersetzt
Adaptive Planning
API-Anforderung.Für diesen Beispielcode ist eine NuGet-Seite erforderlich. Erforderliches NuGet-Paket:
System.IdentityModel.Tokens.Jwt
var clientId = "BlywNDM1NmMtZTk2Mi00NTZiTWEyZjktZWM1NGJiOGQ3Yjca";//Client ID from workday API Client var isu = "PublicAPIISU_Test"; //the ISU var timeout = (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() / 1000 + 300).ToString(CultureInfo.InvariantCulture); var environment = "wd"; var pfxFilePath = @"C:\temp\JWTkeystore2.pfx"; var pfxPassword = "Workday123!"; var payload = new JwtPayload { {"iss", clientId}, {"sub", isu}, {"aud", environment}, {"exp", timeout }, }; var signingCredentials = new X509SigningCredentials(new X509Certificate2(pfxFilePath, pfxPassword), SecurityAlgorithms.RsaSha256); // the matching PKCS #12 file with private key var jwtHeader = new JwtHeader(signingCredentials); var secToken = new JwtSecurityToken(jwtHeader, payload); var handler = new JwtSecurityTokenHandler(); var tokenToWorkday = handler.WriteToken(secToken); Console.WriteLine(tokenToWorkday);
Verwenden Sie das AdaptiveAPIAccessToken in einem Adaptive Planning API-Anforderung
Adaptive Planning
API-AnforderungSobald Sie Workday für eingerichtet haben
Adaptive Planning
Öffentlichen API-Zugriff, das Element credentials von Adaptive Planning
API-Anforderungen verwenden AdaptiveAPIAccessToken anstelle von Benutzername und Kennwort. Eine einfache Authentifizierung mit Benutzername und Kennwort funktioniert nicht. Weitere Informationen finden Sie unter Adaptive Planning REST API and API Methods .Beispiel AdaptiveAPIAccessToken in einem Adaptive Planning API-Anforderung
Adaptive Planning
API-Anforderung<?xml version='1.0' encoding='UTF-8'?> <call method="exportLevels" callerName="a string that identifies your client application"> <credentials token="ID eyJhbDci0iJSUzUxMiIsUmtpZCI6IdvcmtkYXlfa2V5In0.eyJpc3KiOiJXb3JrZGFZIiwiYXV0aF90aW1lIjoxNTczMTY3NjU2LBjzeXnfynnJd.bztQzBmHeTj1amnHA-r96TdrJK0MXMghUFF1KyjxqIq6ruHU63dJp3JAJn3Eche7SEcoZBVGX4wJgna106pmCqgrrVWMf13Hg_sb_szabal2XN1KEEk1qh8z1IDlbt6qJIL_xyW3J2nNSs5ima3vJUYU5sRQXwXst0GuFWXpy464GyB4oKcscrg28X3dnPO_ytdohMKHsWkqyHQKXFQwoQezFaGy10sp4RRUj0lpOZX8C9oBHDYA58IXxGkqKLJVNPvDND6rGY5fTHQ-yxpe1nz-WqB0boiq9a-dv8b3EBzbelxj2fCPdMbng6kzygDcA2at_7BNQiyzfIovS5AG"/> <include versionID="3" inaccessibleValues="false"/> <sheet id="3" /> </call>