Saltar al contenido principal
Adaptive Planning
Última actualización: 2024-01-12
Realización de solicitudes de API de Adaptive Planning con credenciales de Workday

Realización de solicitudes de API de Adaptive Planning con credenciales de Workday

Algunos vínculos de este artículo redirigen a Workday Community. Si no tiene una cuenta de Workday Community, solicítela.
Usuarios sincronizados con Workday que inician sesión en Workday y utilizan
Adaptive Planning
El worklet puede ejecutarse
Adaptive Planning
API públicas Los usuarios deben crear un ISU específicamente para realizar estas solicitudes de API. Estos usuarios deben proporcionar un token en el
credentials
elemento de
Adaptive Planning
Solicitudes de API en lugar de un nombre de usuario y una contraseña. Puede almacenar en caché este token y usarlo hasta que caduque. Una vez caducado, debe obtener un nuevo token.

Requisitos previos

Dominio y grupos de seguridad de Workday
  • Verifique que los usuarios de ISU que necesitan acceso a la API formen parte del dominio de seguridad
    Set Up: Adaptive Planning API Access
    .
Tareas de definición de Workday
  • Verifique que las tareas
    de inicio de sesión único
    estén activadas en la ficha
    Inicio de sesión de usuario
    en el
    Adaptive Planning
    ficha
  • Verifique que la tarea
    de configuración API pública
    esté activada en la ficha
    API pública
    de la
    Adaptive Planning
    ficha
  • Verifique que una tarea de definición de usuario de sistema de integración (ISU) haya creado un ISU específicamente para realizar solicitudes de API de Workday Adaptive Planning y lo haya asignado a un
    Adaptive Planning
    cuenta de usuario
Adaptive Planning
Administrador de usuarios
  • Verifique que vea el ISU que comienza con
    PublicAPIISU_
    en la lista de usuarios dentro de Administración > Usuarios.
  • Verifique que este usuario tenga el nivel de acceso necesario para las API que desea ejecutar. Los nuevos ISU no reciben acceso de nivel por defecto.

Pasos

  1. Obtenga un certificado y extraiga su clave pública.
  2. Registre un cliente API en Workday con ese certificado.
  3. Genere un token JWT, recupere Workday access_token y recupere AdaptiveAPIAccessToken.
  4. Utilizar AdaptiveAPIAccessToken en una
    Adaptive Planning
    Solicitud de API

Obtención de un certificado y extracción de su clave pública

Puede crear un certificado usted mismo o adquirir uno de una entidad emisora de certificados conocida. Para obtener más información sobre los parámetros necesarios para su certificado X.509 en Workday, consulte Concepto: certificados X.509 en Workday.
  1. Extraiga la clave pública de su certificado para cargarla en Workday.
  2. Conserve su clave privada para usarla en su aplicación de llamada.
  3. Pegue el certificado en Workday al registrar su token de portador JWT. Haga referencia a su clave privada en su secuencia de comandos.

Registro de un cliente API de Workday

  1. Registre un cliente API con
    Client Grant Type: Jwt Bearer Grant
    en Workday. Consulte Registro de un cliente API para obtener más información.
  2. Copie la clave pública derivada de su certificado en el
    Certificado x.509
    en la página Register API Client de Workday.
  3. En
    Ámbito (área funcional),
    seleccione
    Adaptive Planning
    .
  4. Cuando termine de registrar el cliente API, copie los campos resultantes en la parte inferior de la página en un archivo de texto para utilizarlos más tarde.
    • Punto final de API de REST de Workday
    • Punto final de token
    • Punto final de autorización

Generate JWT Token, Retrieve Workday access_token y Retrieve AdaptiveAPIAccessToken

  1. Utilice su clave privada y genere el token JWT ejecutando el pseudocódigo que se indica a continuación.
  2. Para recuperar una credencial de acceso de Workday, realice una
    POST
    solicitud al punto final de token, pasando
    grant_type
    y
    assertion
    . Utilice el Token Endpoint copiado después de registrar su cliente de API en Workday. Punto final de token de ejemplo:
    https://{host or gateway}/ccx/oauth2/{tenant}/token
    Ejemplo
    CURL
    solicitud al punto final de token
    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. Recupere AdaptiveAPIAccessToken llamando al punto final de Workday mediante el token de acceso de Workday. Utilizar la anterior
    access_token
    valor como el token de portador en el
    Auth
    cabecera para esto
    GET.
    Token de acceso de ejemplo:
    https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken
    Ejemplo
    CURL
    solicitud 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. Llame al
    Adaptive Planning
    API que utiliza AdaptiveAPIAccessToken en el elemento de credenciales del XML en un HTTP
    POST
    . Ejemplo:
    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

Aplicación Java de muestra para generar una señal JWT

Esta aplicación Java de muestra genera una señal 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 ""; } }

Aplicación de C# de muestra para generar un token JWT

Esta aplicación C# de muestra genera un token JWT que sustituye al nombre de usuario y la contraseña en el elemento de credenciales de un
Adaptive Planning
Solicitud de API
Este código de muestra requiere una página NuGet. Paquete NuGet obligatorio:
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);

Utilizar AdaptiveAPIAccessToken en una
Adaptive Planning
Solicitud de API

Una vez que haya configurado Workday para
Adaptive Planning
acceso público a la API, el elemento de credenciales de
Adaptive Planning
Las solicitudes de API utilizan AdaptiveAPIAccessToken en lugar de un nombre de usuario y una contraseña. La autenticación básica con nombre de usuario y contraseña no funcionará. Consulte API de REST de Adaptive Planning y Métodos de API para obtener más información.

Ejemplo de AdaptiveAPIAccessToken en un
Adaptive Planning
Solicitud de 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>