Skip to main content
Adaptive Planning
Laatst bijgewerkt: 2024-01-12
API-aanvragen voor Adaptive Planning maken met Workday-referenties

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

Workday-domein- en -beveiligingsgroepen
  • Controleer of de ISU-gebruikers die API-toegang nodig hebben deel uitmaken van het beveiligingsdomein
    Instellen: Adaptive Planning API-toegang
    .
Taken Workday-instellingen
  • Controleer of de taken
    voor eenmalige aanmelding
    zijn ingeschakeld op het tabblad
    Gebruikersaanmelding
    in de:
    Adaptive Planning
    tabblad.
  • Controleer of de
    instellingstaak voor de openbare API
    is ingeschakeld op het tabblad
    Openbare API
    in de:
    Adaptive Planning
    tabblad.
  • 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 een
    Adaptive Planning
    gebruikersaccount.
Adaptive Planning
Gebruikersbeheerder
  • Controleer of de ISU begint met
    PublicAPIISU_
    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

  1. Haal een certificaat op en extraheer uw openbare sleutel.
  2. Registreer een API-client in Workday met dat certificaat.
  3. Genereer een JWT-token, haal Workday access_token op en haal AdaptiveAPIAccessToken op.
  4. AdaptiveAPIAccessToken gebruiken in een
    Adaptive Planning
    API-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.
  1. Extraheer de openbare sleutel uit uw certificaat om deze te uploaden naar Workday.
  2. Bewaar uw persoonlijke sleutel voor gebruik in uw aanroepende toepassing.
  3. Plak het certificaat in Workday wanneer u uw JWT-bearertoken registreert. Verwijs in uw script naar uw persoonlijke sleutel.

Een Workday API-client registreren

  1. Registreer een API-client met
    het clienttoekenningstype: Jwt Bearer Grant
    in Workday. Zie Een API-client registreren voor meer informatie.
  2. Kopieer de openbare sleutel die voor uw certificaat is afgeleid naar het
    x.509-certificaat
    op de pagina API-client registreren in Workday.
  3. Selecteer bij
    Bereik (functioneel gebied)
    Adaptive Planning
    .
  4. 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

  1. Gebruik uw persoonlijke sleutel en genereer het JWT-token door de onderstaande pseudocode uit te voeren.
  2. Als u een Workday-toegangstoken wilt ophalen, maakt u a
    POST
    aanvraag voor het tokeneindpunt, doorgegeven
    grant_type
    and
    assertion
    . 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}/token
    Voorbeeld:
    CURL
    aanvraag voor het tokeneindpunt
    curl --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}}'
  3. Haal het AdaptiveAPIAccessToken op door het Workday-eindpunt aan te roepen met behulp van het Workday-toegangstoken. Prioriteit gebruiken
    access_token
    waarde als het Bearer-token in de
    Auth
    koptekst voor dit:
    GET.
    Voorbeeld van toegangstoken:
    https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken
    Voorbeeld:
    CURL
    aanvraag 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 ''
  4. Bel de
    Adaptive Planning
    API met behulp van de AdaptiveAPIAccessToken in het element Referenties van de XML in een HTTP
    POST
    . 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

Nadat 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

<?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>