Passer au contenu principal
Adaptive Planning
Dernière mise à jour : 2024-01-12
Créer des demandes API Adaptive Planning avec des identifiants Workday

Créer des demandes API Adaptive Planning avec des identifiants Workday

Certains liens figurant dans cet article redirigent vers Workday Community. Si vous n'avez pas de compte Community, demandez-en un.
Les utilisateurs synchronisés avec Workday qui se connectent à Workday et utilisent le
Adaptive Planning
Worklet peut s'exécuter
Adaptive Planning
Des API publiques. Les utilisateurs doivent créer un ISU spécialement pour faire ces demandes API. Ces utilisateurs doivent fournir un jeton dans
credentials
élément de
Adaptive Planning
Des demandes API au lieu d'un nom d'utilisateur et d'un mot de passe. Vous pouvez mettre en cache ce jeton et l'utiliser jusqu'à son expiration. Après son expiration, vous devez obtenir un nouveau jeton.

Conditions préalables

Domaine Workday et groupes de sécurité
  • Vérifiez que les utilisateurs ISU qui nécessitent un accès à l'API font partie du domaine de sécurité
    Set Up: Adaptive Planning API Access
    .
Tâches de configuration de Workday
  • Vérifiez que les tâches
    Authentification unique
    sont activées dans l'onglet
    Authentification des utilisateurs
    Adaptive Planning
    onglet.
  • Vérifiez que la tâche
    de configuration de l'API publique
    est activée dans l'onglet
    API publique
    à partir de l'.
    Adaptive Planning
    onglet.
  • Vérifiez qu'une tâche de configuration d'un utilisateur du système d'intégration (ISU) a créé un ISU spécialement pour faire des demandes API Workday Adaptive Planning et l'a mappé à un
    Adaptive Planning
    compte utilisateur.
Adaptive Planning
Administrateur utilisateur
  • Vérifiez que le numéro ISU commence par
    PublicAPIISU_
    dans la liste des utilisateurs du menu Administration > Utilisateurs.
  • Vérifiez que cet utilisateur dispose des droits d'accès au périmètre requis pour les API qu'il souhaite exécuter. Les nouveaux ISU ne reçoivent pas d'accès au périmètre par défaut.

Étapes

  1. Obtenez un certificat et extrayez votre clé publique.
  2. Enregistrez un client API dans Workday avec ce certificat.
  3. Générez un jeton JWT, récupérez Workday access_token et récupérez AdaptiveAPIAccessToken.
  4. Utilisez AdaptiveAPIAccessToken dans un
    Adaptive Planning
    Demande API.

Obtenez un certificat et extrayez votre clé publique

Vous pouvez créer un certificat vous-même ou acheter un certificat auprès d'une autorité administrative de certification bien connue. Pour plus d'informations sur les paramètres requis pour votre certificat X.509 dans Workday, voir Concept : certificats X.509 dans Workday.
  1. Extrayez la clé publique de votre certificat pour la télécharger dans Workday.
  2. Conservez votre clé privée pour pouvoir l'utiliser dans votre application d'appel.
  3. Collez le certificat dans Workday lorsque vous enregistrez votre jeton de type Porteur JWT. Référencez votre clé privée dans votre script.

Enregistrer un client API Workday

  1. Enregistrez un client API avec
    le type d'attribution de client : Autorisation de type Porteur JWT
    dans Workday. Pour plus d'informations, voir Enregistrer un client API .
  2. Copiez la clé publique dérivée du certificat dans le
    certificat x.509
    de la page Register API Client dans Workday.
  3. Pour
    le champ d'application (domaine fonctionnel),
    sélectionnez
    Adaptive Planning
    .
  4. Lorsque vous avez fini d'enregistrer le client API, copiez les champs obtenus en bas de la page dans un fichier texte à utiliser ultérieurement.
    • Point de terminaison de l'API REST Workday
    • Point de terminaison du jeton
    • Point de terminaison de l'autorisation

Générer un jeton JWT, Récupérer Workday access_token et Récupérer AdaptiveAPIAccessToken

  1. Utilisez votre clé privée et générez le jeton JWT en exécutant le pseudo code ci-dessous.
  2. Pour récupérer un jeton d'accès Workday, faites un
    POST
    au point de terminaison du jeton, en transmettant par
    grant_type
    et
    assertion
    . Utilisez le point de terminaison du jeton copié après avoir enregistré votre client API dans Workday. Exemple de point de terminaison de jeton :
    https://{host or gateway}/ccx/oauth2/{tenant}/token
    Exemple
    CURL
    Demande au point de terminaison du jeton
    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. Récupérez AdaptiveAPIAccessToken en appelant le point de terminaison Workday à l'aide du jeton d'accès Workday. Utiliser le précédent
    access_token
    Définissez la valeur du jeton de type Porteur dans
    Auth
    en-tête de this
    GET.
    Exemple de jeton d'accès :
    https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken
    Exemple
    CURL
    la demande pour 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. Appelez
    Adaptive Planning
    API utilisant AdaptiveAPIAccessToken dans l'élément identifiants du XML dans un protocole HTTP
    POST
    . Exemple :
    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

Exemple d'application Java pour générer un jeton JWT

Cet exemple d'application Java génère un jeton JWT.
//********************************************************************** // // 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 ""; } }

Exemple d'application C# pour générer un jeton JWT

Cet exemple d'application C# génère un jeton JWT qui remplace le nom d'utilisateur et le mot de passe dans l'élément identifiants d'un
Adaptive Planning
Requête API.
Cet exemple de code nécessite une page NuGet. Package NuGet obligatoire :
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);

Utilisez AdaptiveAPIAccessToken dans un
Adaptive Planning
Demande API

Une fois que vous avez configuré Workday pour
Adaptive Planning
Accès à l'API publique, élément identifiants de
Adaptive Planning
Les demandes API utilisent AdaptiveAPIAccessToken au lieu d'un nom d'utilisateur et d'un mot de passe. L'authentification de base avec nom d'utilisateur et mot de passe ne fonctionnera pas. Voir API REST et méthodes API d'Adaptive Planning pour plus d'informations.

Exemple AdaptiveAPIAccessToken dans un
Adaptive Planning
Demande API

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