Ir para o conteúdo principal
Adaptive Planning
Última atualização: 2024-01-12
Fazer solicitações de API do Adaptive Planning com credenciais do Workday

Fazer solicitações de API do Adaptive Planning com credenciais do Workday

Alguns links neste artigo levam para o Workday Community. Se você não tem uma conta do Community, solicite uma.
Usuários sincronizados com o Workday que se conectam ao Workday e usam o
Adaptive Planning
O worklet pode ser executado
Adaptive Planning
APIs públicas. Os usuários devem criar um ISU especificamente para fazer essas solicitações de API. Esses usuários devem fornecer um token no
credentials
elemento de
Adaptive Planning
Solicitações de API em vez de nome de usuário e senha. Você pode armazenar esse token em cache e usá-lo até que expire. Depois que ele expira, você deve obter um novo token.

Pré-requisitos

Domínio e grupos de segurança do Workday
  • Verifique se os usuários ISU que precisam de acesso à API fazem parte do domínio de segurança
    Set Up: Adaptive Planning API Access
    .
Tarefas de definição do Workday
  • Verifique se as tarefas
    de autenticação única
    estão habilitadas na guia
    Autenticação de usuário
    no
    Adaptive Planning
    guia.
  • Verifique se a tarefa
    de definição de API pública
    está habilitada na guia
    API pública
    no
    Adaptive Planning
    guia.
  • Verifique se uma tarefa de definição de usuário de sistema de integração (ISU) criou um ISU especificamente para fazer solicitações de API do Workday Adaptive Planning e o mapeou para um
    Adaptive Planning
    conta de usuário.
Adaptive Planning
Administrador de usuários
  • Verifique se o ISU começa com
    PublicAPIISU_
    na lista de usuários em Administração > Usuários.
  • Verifique se esse usuário tem o acesso ao nível necessário para as APIs que quer executar. Os novos ISUs não recebem acesso ao nível por padrão.

Etapas

  1. Obtenha um certificado e extraia sua chave pública.
  2. Registre um cliente de API no Workday com esse certificado.
  3. Gerar um token JWT, recuperar acesso_token do Workday e recuperar AdaptiveAPIAccessToken.
  4. Use o AdaptiveAPIAccessToken em um
    Adaptive Planning
    Solicitação de API

Obter um certificado e extrair sua chave pública

Você mesmo pode criar um certificado ou comprar um certificado de uma autoridade de certificação conhecida. Para obter detalhes sobre os parâmetros necessários para seu certificado X.509 no Workday, consulte Conceito: certificados X.509 no Workday.
  1. Extraia a chave pública do seu certificado para carregá-la no Workday.
  2. Mantenha sua chave privada para usar no aplicativo de chamada.
  3. Cole o certificado no Workday quando registrar seu token JWT Bearer. Faça referência à sua chave privada no script.

Registrar um cliente de API do Workday

  1. Registre um cliente de API com
    o tipo de concessão do cliente: Concessão JWT Bearer
    no Workday. Para obter mais informações, consulte Registrar um cliente de API .
  2. Copie a chave pública derivada do seu certificado no
    certificado x.509
    na página Register API Client do Workday.
  3. Em
    Escopo (área funcional),
    selecione
    Adaptive Planning
    .
  4. Quando terminar de registrar o cliente de API, copie os campos resultantes na parte inferior da página em um arquivo de texto para usar posteriormente.
    • Ponto de extremidade da API REST do Workday
    • Ponto de extremidade do token
    • Ponto de extremidade de autorização

Gerar token JWT, recuperar access_token do Workday e recuperar AdaptiveAPIAccessToken

  1. Use sua chave privada e gere o token JWT executando o pseudocódigo listado abaixo.
  2. Para recuperar um token de acesso do Workday, faça um
    POST
    solicitação ao ponto de extremidade do token, passando
    grant_type
    e
    assertion
    . Use o ponto de extremidade do token copiado após registrar seu cliente de API no Workday. Exemplo de ponto de extremidade de token:
    https://{host or gateway}/ccx/oauth2/{tenant}/token
    Exemplo
    CURL
    solicitação para o ponto de extremidade do 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 o AdaptiveAPIAccessToken ao chamar o ponto de extremidade do Workday usando o token de acesso do Workday. Usar o anterior
    access_token
    como o token Bearer no
    Auth
    cabeçalho para este
    GET.
    Exemplo de token de acesso:
    https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken
    Exemplo
    CURL
    solicitação para o 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. Ligue para o
    Adaptive Planning
    API usando o AdaptiveAPIAccessToken no elemento de credenciais do XML em um HTTP
    POST
    . Exemplo:
    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

Exemplo de aplicativo Java para gerar um token JWT

Este aplicativo Java de amostra gera um token 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 ""; } }

Exemplo de aplicativo em C# para gerar um token JWT

Este aplicativo de amostra em C# gera um token JWT que substitui o nome de usuário e a senha no elemento de credenciais de um
Adaptive Planning
Solicitação de API
Este código de amostra requer uma página do NuGet. Pacote NuGet obrigatório:
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);

Use o AdaptiveAPIAccessToken em um
Adaptive Planning
Solicitação de API

Depois de definir o Workday para
Adaptive Planning
acesso público à API, o elemento credenciais de
Adaptive Planning
As solicitações de API usam o AdaptiveAPIAccessToken em vez de nome de usuário e senha. A autenticação básica com nome de usuário e senha não funciona. Para saber mais, consulte API REST e métodos de API do Adaptive Planning.

Exemplo de AdaptiveAPIAccessToken em um
Adaptive Planning
Solicitação 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>