주 컨텐츠로 이동
Adaptive Planning
최종 업데이트: 2024-01-12
Workday 자격증명을 사용하여 Adaptive Planning API 요청 수행

Workday 자격증명을 사용하여 Adaptive Planning API 요청 수행

이 문서의 일부 링크는 Workday Community로 이동합니다. 커뮤니티 계정이 없으면 계정을 요청하십시오.
Workday에 로그인하여 Workday 계정을 사용하는 Workday 동기화 사용자
Adaptive Planning
Worklet 실행가능
Adaptive Planning
공개 API 사용자는 이러한 API 요청을 수행하기 위한 ISU를 생성해야 합니다. 이러한 사용자는 에서 토큰을 제공해야 합니다.
credentials
요소
Adaptive Planning
사용자명 및 비밀번호 대신 API 요청 이 토큰을 캐시하고 만료될 때까지 사용할 수 있습니다. 토큰이 만료되면 새 토큰을 가져와야 합니다.

선행요건

Workday 도메인 및 시큐리티 그룹
  • API 액세스가 필요한 ISU 사용자가
    Set Up: Adaptive Planning API Access
    시큐리티 도메인의 일부인지 확인합니다.
Workday 설정 태스크
  • 의 '사용자 로그인'
    탭에서
    SSO(Single Sign-On)
    태스크가 활성화되어 있는지 확인합니다.
    Adaptive Planning
    탭을 클릭합니다.
  • 공개 API
    탭에서 공개
    API 설정
    태스크가 활성화되어 있는지 확인합니다.
    Adaptive Planning
    탭을 클릭합니다.
  • 통합 시스템 사용자(ISU) 설정 태스크에서 Workday Adaptive Planning API 요청을 생성하기 위한 ISU를 생성하고 이를 에 매핑했는지 확인합니다.
    Adaptive Planning
    사용자 계정
Adaptive Planning
사용자 관리자
  • 다음으로 시작하는 ISU가 표시되는지 확인합니다.
    PublicAPIISU_
    관리 > 사용자 내의 사용자 목록에서
  • 이 사용자에게 실행하려는 API에 필요한 레벨 액세스 권한이 있는지 확인합니다. 신규 ISU는 기본적으로 레벨 액세스 권한을 받지 않습니다.

단계

  1. 인증서를 가져오고 공개 키를 추출합니다.
  2. 해당 인증서를 사용하여 Workday에 API 클라이언트를 등록합니다.
  3. JWT 토큰을 생성하고, Workday Access_token을 검색하고, AdaptiveAPIAccessToken을 검색합니다.
  4. 다음에서 AdaptiveAPIAccessToken을 사용합니다.
    Adaptive Planning
    API 요청

인증서 가져오기 및 공개 키 추출

인증서를 직접 생성하거나 잘 알려진 인증 기관에서 인증서를 구매할 수 있습니다. Workday의 X.509 인증서에 필요한 매개변수에 대한 자세한 내용은개념: Workday의 X.509 인증서를참조하십시오.
  1. Workday에 업로드하기 위해 인증서에서 공개 키를 추출합니다.
  2. 호출 어플리케이션에서 사용할 수 있도록 개인 키를 보관합니다.
  3. JWT 전달자 토큰을 등록할 때 Workday에 인증서를 붙여넣습니다. 스크립트에서 개인 키를 참조합니다.

Workday API 클라이언트 등록

  1. Workday에서 API 클라이언트를
    클라이언트 부여 유형: Jwt 전달자 부여
    로 등록합니다. 자세한 내용은API 클라이언트 등록을 참조하십시오.
  2. 인증서에 대해 파생된 공개 키를 Workday의 API 클라이언트 등록 페이지에서
    x.509 인증서
    에 복사합니다.
  3. Scope (Functional Area)
    에 대해 다음을 선택합니다.
    Adaptive Planning
    .
  4. API 클라이언트 등록을 완료하면 페이지 맨 아래에 있는 결과 필드를 나중에 사용할 수 있도록 텍스트 파일에 복사합니다.
    • Workday REST API 엔드포인트
    • 토큰 엔드포인트
    • 권한 부여 엔드포인트

JWT 토큰 생성, Workday Access_token 검색 및 AdaptiveAPIAccessToken 검색

  1. 비공개 키를 사용하고 아래 나열된 유사 코드를 실행하여 JWT 토큰을 생성합니다.
  2. Workday 액세스 토큰을 검색하려면 다음을 수행합니다.
    POST
    토큰 엔드포인트에 요청, 전달
    grant_type
    assertion
    . Workday에서 API 클라이언트를 등록한 후 복사한 토큰 엔드포인트를 사용합니다. 토큰 엔드포인트의 예:
    https://{host or gateway}/ccx/oauth2/{tenant}/token
    CURL
    토큰 엔드포인트에 요청
    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. Workday 액세스 토큰을 사용하여 Workday 엔드포인트를 호출하여 AdaptiveAPIAccessToken을 검색합니다. 이전 항목 사용
    access_token
    값을 전달자 토큰으로 사용
    Auth
    헤더
    GET.
    액세스 토큰의 예:
    https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken
    CURL
    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. 다음을 호출합니다.
    Adaptive Planning
    HTTP에서 XML의 credentials 요소에서 AdaptiveAPIAccessToken을 사용하는 API
    POST
    . 예를 들어 다음과 같습니다.
    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

JWT 토큰 생성을 위한 샘플 Java 어플리케이션

이 샘플 Java 어플리케이션은 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 ""; } }

JWT 토큰 생성을 위한 샘플 C# 어플리케이션

이 샘플 C# 어플리케이션은 의 자격증명 요소에서 사용자명과 비밀번호를 대체하는 JWT 토큰을 생성합니다.
Adaptive Planning
API 요청
이 샘플 코드에는 NuGet 페이지가 필요합니다. 필수 NuGet 패키지:
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을 사용합니다.
Adaptive Planning
API 요청

다음에 대해 Workday를 설정한 후
Adaptive Planning
공개 API 액세스, 의 자격증명 요소
Adaptive Planning
API 요청은 사용자명과 비밀번호 대신 AdaptiveAPIAccessToken을 사용합니다. 사용자명 및 비밀번호를 사용한 기본 인증이 작동하지 않습니다. 자세한 내용은Adaptive Planning REST APIAPI 메서드를참조하십시오.

의 AdaptiveAPIAccessToken의 예는 다음과 같습니다.
Adaptive Planning
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>