API-aanvragen voor Adaptive Planning maken met Workday-referenties
Some links in this article go to the Workday Community. If you don't have
a Community account, request
one.
Gesynchroniseerde Workday-gebruikers die zich aanmelden bij Workday en de
Adaptive Planning
Worklet kan worden uitgevoerd Adaptive Planning
openbare API's. Gebruikers moeten een ISU maken die specifiek is bedoeld voor het maken van deze API-aanvragen. Deze gebruikers moeten een token opgeven in de credentials
element van Adaptive Planning
API-aanvragen in plaats van een gebruikersnaam en wachtwoord. U kunt dit token in de cache opslaan en gebruiken totdat het verloopt. Nadat deze is verlopen, moet u een nieuw token ophalen.
Prerequisites
Prerequisites
Workday-domein- en -beveiligingsgroepen
- Controleer of de ISU-gebruikers die API-toegang nodig hebben deel uitmaken van het beveiligingsdomeinInstellen: Adaptive Planning API-toegang.
Taken Workday-instellingen
- Controleer of de takenvoor eenmalige aanmeldingzijn ingeschakeld op het tabbladGebruikersaanmeldingin de:Adaptive Planningtabblad.
- Controleer of deinstellingstaak voor de openbare APIis ingeschakeld op het tabbladOpenbare APIin de:Adaptive Planningtabblad.
- Controleer of een installatietaak voor een integratiesysteemgebruiker (ISU) een ISU heeft gemaakt die specifiek is bedoeld voor het maken van API-aanvragen voor Workday Adaptive Planning en deze heeft toegewezen aan eenAdaptive Planninggebruikersaccount.
Adaptive Planning
Gebruikersbeheerder- Controleer of de ISU begint metPublicAPIISU_in de gebruikerslijst in Beheer > Gebruikers.
- Controleer of deze gebruiker de niveautoegang heeft die nodig is voor de API's die ze willen uitvoeren. Nieuwe ISU's krijgen standaard geen niveautoegang.
Steps
Steps
- Haal een certificaat op en extraheer uw openbare sleutel.
- Registreer een API-client in Workday met dat certificaat.
- Genereer een JWT-token, haal Workday access_token op en haal AdaptiveAPIAccessToken op.
- AdaptiveAPIAccessToken gebruiken in eenAdaptive PlanningAPI-aanvraag.
Een certificaat aanvragen en uw openbare sleutel extraheren
U kunt zelf een certificaat maken of een certificaat kopen bij een bekende certificeringsinstantie. Zie Concept: X.509-certificaten in Workday voor meer informatie over de parameters die nodig zijn voor uw X.509-certificaat in Workday.
- Extraheer de openbare sleutel uit uw certificaat om deze te uploaden naar Workday.
- Bewaar uw persoonlijke sleutel voor gebruik in uw aanroepende toepassing.
- Plak het certificaat in Workday wanneer u uw JWT-bearertoken registreert. Verwijs in uw script naar uw persoonlijke sleutel.
Een Workday API-client registreren
- Registreer een API-client methet clienttoekenningstype: Jwt Bearer Grantin Workday. Zie Een API-client registreren voor meer informatie.
- Kopieer de openbare sleutel die voor uw certificaat is afgeleid naar hetx.509-certificaatop de pagina API-client registreren in Workday.
- Selecteer bijBereik (functioneel gebied).Adaptive Planning
- Wanneer u klaar bent met het registreren van de API-client, kopieert u de resulterende velden onderaan de pagina naar een tekstbestand om later te gebruiken.
- REST-API-eindpunt van Workday
- Token Endpoint
- Autorisatie-eindpunt
JWT-token genereren, Workday access_token ophalen en AdaptiveAPIAccessToken ophalen
- Gebruik uw persoonlijke sleutel en genereer het JWT-token door de onderstaande pseudocode uit te voeren.
- Als u een Workday-toegangstoken wilt ophalen, maakt u aPOSTaanvraag voor het tokeneindpunt, doorgegevengrant_typeandassertion. Gebruik het tokeneindpunt dat u hebt gekopieerd na het registreren van uw API-client in Workday. Voorbeeld van tokeneindpunt:https://{host or gateway}/ccx/oauth2/{tenant}/tokenVoorbeeld:CURLaanvraag voor het tokeneindpuntcurl --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}}'
- Haal het AdaptiveAPIAccessToken op door het Workday-eindpunt aan te roepen met behulp van het Workday-toegangstoken. Prioriteit gebruikenaccess_tokenwaarde als het Bearer-token in deAuthkoptekst voor dit:GET.Voorbeeld van toegangstoken:https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessTokenVoorbeeld:CURLaanvraag voor de AdaptiveAPIAccessToken:curl --request GET 'https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken' \ --header 'Authorization: Bearer {{the prior access_token value}}' \ --data-raw ''
- Bel deAdaptive PlanningAPI met behulp van de AdaptiveAPIAccessToken in het element Referenties van de XML in een HTTPPOST. Voorbeeld: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
Voorbeeld van een Java-toepassing voor het genereren van een JWT-token
Deze Java-voorbeeldtoepassing genereert een 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 ""; } }
Voorbeeld van een C#-toepassing voor het genereren van een JWT-token
Deze C#-voorbeeldtoepassing genereert een JWT-token dat de gebruikersnaam en het wachtwoord vervangt in het element credentials van een
Adaptive Planning
API-aanvraag.Voor deze voorbeeldcode is een NuGet-pagina vereist. Vereist NuGet-pakket:
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);
AdaptiveAPIAccessToken gebruiken in een Adaptive Planning API-aanvraag
Adaptive Planning
API-aanvraagNadat u Workday hebt ingesteld voor:
Adaptive Planning
openbare API-toegang, het element Referenties van Adaptive Planning
API-aanvragen gebruiken de AdaptiveAPIAccessToken in plaats van een gebruikersnaam en wachtwoord. Basisverificatie met gebruikersnaam en wachtwoord werkt niet. Zie REST-API en API-methoden
voor Adaptive Planning voor meer informatie.Voorbeeld van AdaptiveAPIAccessToken in een Adaptive Planning API-aanvraag
Adaptive Planning
API-aanvraag<?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>