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
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âchesAuthentification uniquesont activées dans l'ongletAuthentification des utilisateursAdaptive Planningonglet.
- Vérifiez que la tâchede configuration de l'API publiqueest activée dans l'ongletAPI publiqueà partir de l'.Adaptive Planningonglet.
- 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é à unAdaptive Planningcompte utilisateur.
Adaptive Planning
Administrateur utilisateur- Vérifiez que le numéro ISU commence parPublicAPIISU_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
Étapes
- Obtenez un certificat et extrayez votre clé publique.
- Enregistrez un client API dans Workday avec ce certificat.
- Générez un jeton JWT, récupérez Workday access_token et récupérez AdaptiveAPIAccessToken.
- Utilisez AdaptiveAPIAccessToken dans unAdaptive PlanningDemande 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.
- Extrayez la clé publique de votre certificat pour la télécharger dans Workday.
- Conservez votre clé privée pour pouvoir l'utiliser dans votre application d'appel.
- 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
- Enregistrez un client API avecle type d'attribution de client : Autorisation de type Porteur JWTdans Workday. Pour plus d'informations, voir Enregistrer un client API .
- Copiez la clé publique dérivée du certificat dans lecertificat x.509de la page Register API Client dans Workday.
- Pourle champ d'application (domaine fonctionnel),sélectionnez.Adaptive Planning
- 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
- Utilisez votre clé privée et générez le jeton JWT en exécutant le pseudo code ci-dessous.
- Pour récupérer un jeton d'accès Workday, faites unPOSTau point de terminaison du jeton, en transmettant pargrant_typeetassertion. 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}/tokenExempleCURLDemande au point de terminaison du jetoncurl --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}}'
- Récupérez AdaptiveAPIAccessToken en appelant le point de terminaison Workday à l'aide du jeton d'accès Workday. Utiliser le précédentaccess_tokenDéfinissez la valeur du jeton de type Porteur dansAuthen-tête de thisGET.Exemple de jeton d'accès :https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessTokenExempleCURLla 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 ''
- AppelezAdaptive PlanningAPI utilisant AdaptiveAPIAccessToken dans l'élément identifiants du XML dans un protocole HTTPPOST. 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
Adaptive Planning
Demande APIUne 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
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>