認証コード権限許可ワークフロー
ServiceNow® は、認証およびリソースサーバーとして機能することで、認証と API アクセスの両方を処理します。シングルサインオン (SSO) を有効にすると、認証のために構成された IdP にユーザーがリダイレクトされ、ログインが成功するとトークンが発行されます。
始める前に
必要なロール: oauth_admin、mi_admin、admin
このタスクについて
このトピックコレクションでは、認証サーバーとリソースサーバーの両方として機能する場合に、 ServiceNow が認証と API アクセスを管理する方法について説明します。SSO が有効になっているときの動作について説明します。これには、ユーザー認証のための ID プロバイダー (IdP) へのリダイレクトや、認証成功後の ServiceNow による認証コードの発行などが含まれます。認証コードを使用することで、 ServiceNow はトークンの発行と保護されたリソースへのアクセスを引き続き制御できます。
手順
-
クライアントアプリケーションからログインします。
ユーザーは、クライアントアプリケーションインターフェイスからログインプロセスを開始します。
-
認証要求を開始します。
クライアントはユーザーを認証エンドポイント ServiceNow リダイレクトして認証要求を開始します。認証要求は、クライアントタイプ (プライベートまたはパブリック) に基づいて、要求本文に
クライアントシークレットまたはPKCE コードチャレンジを含めることで開始できます。認証要求本文に、プライベートクライアントの場合はクライアントシークレット、パブリッククライアントの場合はPKCE コードチャレンジを含めます。- プライベートクライアントの場合
- プライベートクライアントのトークン要求を開始するときに、要求本文に
クライアントシークレットを含めます。プライベートクライアントのクライアントシークレットを使用して認証要求を開始する手順に従います。 - 次のパラメーターを使用して、認証エンドポイントへの GET 要求を実行します。
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do表 : 1. 認証要求パラメーター (プライベートクライアント/クライアントシークレット) パラメーター 必須 説明 response_typeはい 認証コードフローを開始するには、 値を codeに設定します。client_idはい クライアントアプリケーションの一意の識別子。 形式:YOUR_CLIENT_ID
redirect_uriはい ServiceNow が認証コードを送信する URI。 例:https://yourapp.com/callback
スコープあり 要求されたスコープのスペース区切りリスト。 例:
incident_read incident_write。stateはい クロスサイトリクエストフォージェリ (CSRF) 攻撃を回避するために使用されるクライアント生成値。値はリダイレクト URI で変更されずに返され、クライアントが検証できるようになります - パブリッククライアントの場合
- パブリッククライアントのトークン要求を開始するときに、要求本文に
PKCE コードチャレンジを含めます。パブリッククライアントのPKCE コードチャレンジを使用して認証要求を開始する手順に従います。 - 次のパラメーターを使用して、認証エンドポイントへの GET 要求を実行します。
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do表 : 2. 認証要求パラメーター (パブリッククライアント - PKCE) パラメーター 必須 説明 response_typeはい 認証コードフローを開始するには、 値を codeに設定します。client_idはい クライアントアプリケーションの一意の識別子。 形式:YOUR_CLIENT_ID
redirect_uriはい ServiceNow が認証コードを送信する URI。 例:https://yourapp.com/callback
code_challengeはい コード検証ツールの base64url でエンコードされた SHA-256 ハッシュ。これは、PKCE フローの一部として使用されます。 code_challenge_methodはい コードチャレンジに使用する変換方法を指定します。 S256に設定します。スコープあり 要求されたスコープのスペース区切りリスト。 例:
incident_read incident_write。stateはい CSRF 攻撃を回避するために使用されるクライアント生成値。値は変更されずにリダイレクト URI で返され、クライアントはそれを検証できます。 注:Madrid リリース以降、システムプロパティglide.oauth.state.parameter.requiredにより、OAuth 要求でstateパラメーターの使用が義務付けられています。stateプロパティは、新しいインスタンスではデフォルトでtrueに設定され、アップグレードされたインスタンスではオプションです。ステータスパラメーターがない場合、認証要求は失敗し、次のエラーが表示されます:要求にステータスパラメーターがありません。
-
クライアントアプリケーションへのアクセス同意を付与します。
ServiceNowログインページ (SSO が有効な場合は IdP) にアクセスし、クライアントアプリケーションへのアクセス同意を付与します。
-
ServiceNow (SSO が有効な場合は IdP) が認証情報を検証し ServiceNow クライアントに認証コードを返します。
認証が成功すると、ブラウザーは
redirect_uriにリダイレクトされ、認証コードがクエリ文字列に含まれます。https://yourapp.com/callback?code=AUTH_CODE&state=xyz123 -
クライアントは、ServiceNow のトークンエンドポイントを呼び出して、アクセストークン (およびプライベートクライアントの場合はリフレッシュトークン) の認証コードを交換します。
アクセストークンの認証コードは、クライアントタイプ (プライベートまたはパブリック) に基づいて、要求本文に
クライアントシークレットまたはPKCE コードチャレンジを含めることで開始できます。トークン要求本文に、プライベートクライアントの場合はクライアントシークレット、パブリッククライアントの場合はPKCE コードチャレンジを含めます。- プライベートクライアントの場合
- プライベートクライアントのトークン要求を開始するときに、要求本文に
クライアントシークレットを含めます。プライベートクライアントのクライアントシークレットを使用してトークン要求を開始する手順に従います。 - プライベートクライアントの場合、クライアントは次のパラメーターを使用してトークンエンドポイントに
POST要求を送信します。Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded表 : 3. トークン要求パラメーター (プライベートクライアント/クライアントシークレット) パラメーター 必須 説明 grant_typeはい コードをトークンと交換するには、値を authorization_codeに設定します。コードはい 認証エンドポイントから受信した認証コード。 redirect_uriはい 最初の認証要求で使用される URI。 例:https://yourapp.com/callback
client_idはい クライアントアプリケーションの一意の識別子。 client_secretはい トークンエンドポイントでの認証に使用されるクライアントのシークレット。 stateはい CSRF 攻撃を防止するために使用される、クライアント生成の値。値は変更されずにリダイレクト URI で返され、クライアントはそれを検証できます。 - パブリッククライアントの場合
- パブリッククライアントのトークン要求を開始するときに、要求本文に
PKCE コードチャレンジを含めます。パブリッククライアントのPKCE コードチャレンジを使用して認証要求を開始する手順に従います。 - クライアントは、次のパラメーターを使用してトークンエンドポイントに POST 要求を送信します。
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded表 : 4. トークン要求パラメーター (public client-PKCE) パラメーター 必須 説明 grant_typeはい コードをトークンと交換するには、値を authorization_codeに設定します。コードはい 認証エンドポイントから受信した認証コード。 redirect_uriはい 最初の認証要求で使用される URI。 例:https://yourapp.com/callback
client_idはい クライアントアプリケーションの一意の識別子。 code_verifierはい PKCE code_challengeの生成に使用された元の文字列。stateはい CSRF 攻撃を防止するために使用される、クライアント生成の値。値は変更されずにリダイレクト URI で返され、クライアントはそれを検証できます。
-
アクセストークンを使用して ServiceNow API にアクセスします。
- 例:
- アクセストークンを使用して、API への GET 要求を行います。
Authorizationヘッダーにアクセストークンを含めます。
Method: GET End Point: https://<servicenow_base_url>/api/now/incident Authorization: Bearer YOUR_ACCESS_TOKEN -
アクセストークンが期限切れになっている場合は更新します。
次のパラメーターを使用して、アクセストークンを更新する POST 要求を行います (プライベートクライアントのみ)。
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencoded表 : 5. リフレッシュトークン要求パラメーター (プライベートクライアント) パラメーター 必須 説明 grant_typeはい 新しいアクセストークンを要求するには、値を refresh_tokenに設定します。refresh_tokenはい トークンエンドポイントによって以前に発行されたリフレッシュトークン。 client_idはい クライアントアプリケーションの一意の識別子。 client_secretはい トークンエンドポイントでの認証に使用されるクライアントシークレット。