Workday 認証情報を使用した Adaptive Planning API リクエストを実行
この記事の一部のリンクは Workday Community に移動します。Community のアカウントをお持ちでない方は、リクエストしてください。
Workday にログインし、
Adaptive Planning
ワークレット実行可能 Adaptive Planning
公開 APIユーザーは、これらの API リクエストを実行するための専用 ISU を作成する必要があります。これらのユーザーは、トークンを次の場所に提供する必要があります: credentials
要素の Adaptive Planning
ユーザー名とパスワードの代わりに API リクエストを作成する。このトークンはキャッシュし、有効期限が切れるまで使用できます。有効期限が切れたら、新しいトークンを取得する必要があります。
前提条件
前提条件
Workday ドメインとセキュリティ グループ
- API アクセスを必要とする ISU ユーザーが"Set Up: Adaptive Planning API Access"セキュリティ ドメインに含まれていることを確認します。
Workday 設定タスク
- 次の場所の"ユーザー サインイン"タブ内で、Single Sign On (SSO)タスクが有効になっていることを確認します。Adaptive Planningタブ
- 次の場所の "公開API" タブ内で、公開 API設定タスクが有効になっていることを確認します。Adaptive Planningタブ
- インテグレーション システム ユーザー (ISU) 設定タスクで、Workday Adaptive Planning API リクエストを実行するための専用 ISU を作成し、マッピングしたことを確認します。Adaptive Planningユーザー アカウント
Adaptive Planning
ユーザー管理- ISU が次の値で始まることを確認しますPublicAPIISU_"管理" > "ユーザー" のユーザー リスト
- このユーザーに、実行したい API に必要な組織アクセス権があることを確認します。新しい ISU はデフォルトで組織アクセス権を受け取りません。
ステップ
ステップ
- 証明書を取得して公開キーを抽出します。
- その証明書を使用して Workday に API クライアントを登録します。
- JWT トークンの生成、Workday Access_Token の取得、AdaptiveAPIAccessToken の取得を実行します。
- で AdaptiveAPIAccessToken を使用Adaptive PlanningAPI リクエスト。
証明書を取得して公開キーを抽出
証明書は自分で作成することも、認識済みの認証機関から購入することもできます。Workday の X.509 Certificate に必要なパラメータの詳細については、 概念: Workday の X.509 Certificates を参照してください。
- Workday にアップロードするための証明書から公開キーを抽出します。
- 呼び出しアプリケーションで使用する秘密キーを保持してください。
- JWT Bearer トークンの登録時に証明書を貼り付けます。スクリプトで秘密キーを参照します。
JWT (JSON Web トークン) を使用した OAuth および 外部エンドポイントへのアクセスを参照してください。
Workday API クライアントの登録
- Workday でクライアントの付与タイプ "Jwt Bearer 付与"を使用して API クライアントを登録します。詳細については、API クライアントの登録を 参照してください。
- 証明書から派生した公開キーを Workday の "API クライアントの登録" ページの "x.509 証明書"にコピーします。
- "適用範囲 (業務分野)"を選択。Adaptive Planning
- API クライアントの登録が完了したら、ページの下部にある結果フィールドをテキスト ファイルにコピーして、後で使用します。
- Workday REST API エンドポイント
- トークン エンドポイント
- 認証エンドポイント
JWT トークンの生成、Workday Access_Token の取得、AdaptiveAPIAccessToken の取得
- 秘密キーを使用し、以下にリストされている仮想コードを実行して JWT トークンを生成します。
- 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}}'
- Workday アクセス トークンを使用して Workday エンドポイントを呼び出すことにより、AdaptiveAPIAccessToken を取得します。前のものを使用access_tokenの "Bearer" トークンの値AuthこのヘッダーGET.アクセス トークンの例:https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken例CURLAdaptiveAPIAccessToken のリクエスト:curl --request GET 'https://{host or gateway}/ccx/api/planning/v1/{tenant}/adaptiveAPIAccessToken' \ --header 'Authorization: Bearer {{the prior access_token value}}' \ --data-raw ''
- 以下を呼び出します。Adaptive PlanningHTTP の XML の認証情報要素で AdaptiveAPIAccessToken を使用した APIPOST。例: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 リクエスト
Adaptive Planning
API リクエストWorkday の設定が終了すると、
Adaptive Planning
公開 API アクセス、 の認証情報要素 Adaptive Planning
API リクエストでは、ユーザー名とパスワードの代わりに AdaptiveAPIAccessToken を使用します。ユーザー名とパスワードによる基本認証が機能しません。詳しくは Adaptive Planning REST API および API メソッド を参照してください。以下の AdaptiveAPIAccessToken の例 Adaptive Planning API リクエスト
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>