受信 API 呼び出しの JWT 認証を構成する方法Summary<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } JSON Web トークン (JWT) 認証を使用して、受信 API 呼び出しを受け入れるように ServiceNow インスタンスを構成する方法について説明します。この記事では、Java KeyStore の作成、JWT 署名キーの構成、JWT プロバイダーの設定、および外部クライアント用の OAuth アプリケーションエンドポイントの登録について説明します。この KB では、JWT トークンを使用して着信コールのインスタンスを設定する方法について説明します。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } すべてのリリース Instructions<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 外部クライアント用の OAuth JWT API エンドポイントを使用してアプリケーションレジストリを作成するには、次の 4 つの主要な手順を実行します。 Java KeyStore を作成してインスタンスにアップロードJWT 署名キーの構成JWT 署名キーを使用した JWT プロバイダーの作成OAuth プロバイダーに接続し、OAuth アプリケーションレジストリを作成 注:ServiceNow インスタンスをトークンプロバイダーとして登録するには、ステップ 1 と 4 のみが必須です。JWT トークンを作成する手順については、この記事の後半で説明するため、ステップ 2 と 3 が含まれています。 ステップ 1:Java KeyStore を作成してインスタンスにアップロード A.JKS ファイルの作成 次の keytool コマンドを実行して、Java KeyStore ファイルを生成します。 keytool -genkey -alias snclient -keyalg RSA -validity 365 -keystore snclient.keystore -storepass abcd1234 -keypass abcd1234 このコマンドは、次のプロパティを持つファイルを作成します。 ファイル名:snclient.keystoreストア ID: abcd1234(これらはあくまで例です。本番環境では強力なパスワードに置き換えてください)キーのパスワード:abcd1234 B.証明書をインスタンスにインポート KeyStore パスワードを使用して証明書をインスタンスにインポートします。 注意:ServiceNow インスタンスをトークンプロバイダーとして登録する場合、Java KeyStore のアップロードは必須ではありません。必要なのはサブステップ C と D のみです。JWT トークンの作成手順については、この記事の後半で説明するため、サブステップ B が含まれています。 C.KeyStore から証明書をエクスポート 次のコマンドを実行して証明書をエクスポートします。 keytool -exportcert -alias snclient -keystore snclient.keystore -storepass abcd1234 -file snclient.cer このコマンドは、同じフォルダーに snclient.cer という名前の.cerファイルを作成します。 PEM 形式に変換するには、次を実行します。 openssl x509 -inform der -in snclient.cer -out certificate.pem D. インスタンスでの証明書レコードの作成 certificate.pem を使用して、証明書 [sys_certificate] テーブルに新しいレコードを作成します。 ステップ 2:JWT 署名キーを構成 JWT 署名キーレコードの作成 システム OAuth > JWT キー に移動します。[新規] を選択します。[署名キーストア] フィールドで、ステップ 1 で作成したキーストアレコードを選択します。現時点では、[キー ID] フィールドは空のままにします。このフィールドはステップ 4 で更新します。 注意: 署名キーストア フィールドには、選択したキーストア形式 (Java KeyStore または BCFKS KeyStore) でサポートされている証明書タイプのみが表示されます。 ステップ 3:JWT 署名キーを使用して JWT プロバイダーを作成 JWT プロバイダーレコードの作成 システム OAuth > JWT プロバイダー に移動します。[ 新規 ]を選択します。[署名構成] フィールドで、ステップ 2 で作成した JWT 署名キーを選択します。レコードを保存します。 レコードを保存すると、次の 3 つの標準要求が自動的に作成されます。 aud (対象者)iss(発行者)サブ (件名) 現時点では、要求値は空のままにします。これらの値はステップ 4 で構成します。 JWT 要求の詳細については、「関連リンク」セクションを参照してください。 ステップ 4:OAuth プロバイダーに接続し、OAuth アプリケーションレジストリを作成 A.OAuth アプリケーションレジストリの作成 システム OAuth > アプリケーションレジストリ に移動します。[ 新規 ]を選択します。[ 外部クライアント用の OAuth JWT API エンドポイントを作成します] を選択します。[ユーザー] フィールド(デフォルトはメール)などの必須フィールドに入力します。レコードを保存します。 注意:[ユーザー] フィールドの値によって、プラットフォームがユーザーを識別する方法が決まります。このフィールドが正しく構成されていることを確認します。 B.JWT 検証者マップの構成 アプリケーションレジストリレコードで、[ JWT 検証者マップ] 関連リストまでスクロールします。[ 新規 ]を選択します。[Sys Certificate] フィールドで、作成した PEM 証明書を選択します。後のステップで使用するために、自動入力された kid (Key ID) 値をコピーします。[共有キー] フィールドに、証明書の作成時に使用した共有 ID を入力します。レコードを保存します。 C.JWT プロバイダー要求の値を更新 注意:ServiceNow インスタンスをトークンプロバイダーとして登録する場合、このサブステップは必須ではありません。JWT トークンを作成する手順については、この記事の後半で説明するため、これを含めます。 システム OAuth > JWT プロバイダー に移動します。ステップ 3 で作成した JWT プロバイダーレコードを開きます。要求値を更新します。 aud (audience):アプリケーションレジストリレコードからクライアント ID を入力します。iss (発行者):アプリケーションレジストリレコードからクライアント ID を入力します。サブ (件名):トークンに関連付けるユーザーのメールアドレスを入力します。 レコードを保存します。 D. JWT 署名キーをキー ID で更新 注意:ServiceNow インスタンスをトークンプロバイダーとして登録する場合、このサブステップは必須ではありません。JWT トークンを作成する手順については、この記事の後半で説明するため、これを含めます。 システム OAuth > JWT キー に移動します。ステップ 2 で作成した JWT 署名キーレコードを開きます。[ キー ID フィールドに、サブステップ B で JWT 検証者マップからコピーした kid 値を入力します。レコードを保存します。 JWT トークンの生成 セットアップが完了したら、JWT トークンを生成し、それを使用してアクセストークンを取得できます。 次のスクリプトを実行して JWT トークンを生成します。 var jwtAPI = new sn_auth.GlideJWTAPI();var headerJSON = { "kid": "<ID generated in step-4>" };var header = JSON.stringify(headerJSON); var payloadJSON = { "aud": "{client-id}", "iss": "{client-id}", "sub": "{email of the user for which the token needs to be associated to}" };var payload = JSON.stringify(payloadJSON); var jwtProviderSysId = " <sys id of the JWT provider record>";var jwt = jwtAPI.generateJWT(jwtProviderSysId, header, payload); gs.info("JWT:" + jwt); 結果の例 注意:JWT アサーションの生成はクライアントアプリケーションの責任です。クライアントアプリケーションは、秘密鍵と構成された署名アルゴリズムを使用してアサーションを生成する必要があります。このスクリプトは情報提供のみを目的として提供されています。 JWT トークンを確認 スクリプトによって生成された JWT トークンをコピーします。 jwt.ioに移動してトークンを検証します。署名検証には、ステップ 1 で作成した certificate.pem ファイルの値を使用します。署名が検証されたら、テストに進みます。 Postman を使用してトークンをテスト 次の URL に POST 要求を送信します。 https://<your-instance>.service-now.com/oauth_token.do 次の設定で要求を構成します。 認証:なしボディタイプ: x-www-form-urlencoded 本文に次のパラメーターを含めます。 パラメーター値client_idアプリケーションレジストリからのクライアント IDclient_secretアプリケーションレジストリからのクライアントシークレットgrant_typeurn:ietf:params:oauth:grant-type:jwt-bearerアサーションJWT トークンの値 サンプル応答 { "access_token": "wjphK8iz6_ixmYUY358QdklkIm9Ps2Nq1t1NG9CqtKMNZvWwDEAIUD5Rc8hvZZXlWXPU9IHRFIe_VCfeh_hSuQ", "scope": "useraccount", "token_type": "Bearer", "expires_in": 1799 } 正常な応答を受信した後、 [システム OAuth] > [トークンの管理] でトークンを確認できます。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } JSON Web トークンの概要 JSON Web トークン要求