認証コード権限許可ワークフロー
OAuth 認証コード権限許可は、ユーザーの同意を得てユーザーデータにアクセスする Web、モバイル、またはデスクトップアプリで広く使用されている安全で広く使用されているフローです。プライベートクライアント (クライアントシークレットを使用) とパブリッククライアント (PKCE を使用) の両方をサポートします。
始める前に
必要なロール: oauth_admin、mi_admin、admin
このタスクについて
このトピックコレクションでは、クライアントアプリケーションが認証コード権限許可フローを使用して ServiceNow からトークンを取得し、そのトークンを使用して API 呼び出しを行う方法について説明します。プライベートクライアントはクライアントシークレットを使用し、パブリッククライアントは PKCE コードチャレンジを使用します。
手順
-
クライアントアプリケーションからログインします。
ユーザーは、クライアントアプリケーションインターフェイスからログインプロセスを開始します。
-
認証要求を開始します。
クライアントは、ユーザーを ServiceNow 認証エンドポイントにリダイレクトします。認証要求を開始する方法は、クライアントのタイプ (パブリックまたはプライベート) によって異なります。
- 公開クライアント
-
パブリッククライアント (例:モバイルアプリケーションまたはシングルページアプリケーション) は、クライアントシークレットを安全に保存できません。したがって、セキュリティを強化するために コード交換の証明キー (PKCE) を使用する必要があります。
- 認証要求に PKCE コードチャレンジ を含め、 コードチャレンジメソッドを指定します。
- トークン要求中に、クライアントは コード検証ツール を送信して認証コードを検証する必要があります。
- 次のパラメーターを使用して、認証エンドポイントへの GET 要求を実行します。
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do表 : 1. 認証要求パラメーター (パブリッククライアント - 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に設定され、アップグレードされたインスタンスではオプションです。ステータスパラメーターがない場合、認証要求は失敗し、次のエラーが表示されます:要求にステータスパラメーターがありません。 - プライベートクライアント
-
プライベートクライアント (例:サーバー側アプリケーション) は、クライアントシークレットを安全に保存でき、PKCE は必要ありません。
- 認証要求は、ユーザーを認証エンドポイントにリダイレクトすることによって開始されます。この手順では、クライアントシークレットまたは PKCE コードのチャレンジは必要ありません。
- トークン要求時に、クライアントはアクセストークンを取得するための認証コードとともにクライアントシークレットを含めます。
- 次のパラメーターを使用して、認証エンドポイントへの GET 要求を実行します。
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.do表 : 2. 認証要求パラメーター (プライベートクライアント/クライアントシークレット) パラメーター 必須 説明 response_typeはい 認証コードフローを開始するには、 値を codeに設定します。client_idはい クライアントアプリケーションの一意の識別子。 形式:YOUR_CLIENT_ID
redirect_uriはい ServiceNow が認証コードを送信する URI。 例:https://yourapp.com/callback
スコープオプション 要求されたスコープのスペース区切りリスト。 例:
incident_read incident_write。stateはい クロスサイトリクエストフォージェリ (CSRF) 攻撃を回避するために使用されるクライアント生成値。値は変更されずにリダイレクト URI で返され、クライアントはそれを検証できます。
-
ログインし、クライアントアプリケーションにアクセス同意を付与します。
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. トークン要求パラメーター (public client-PKCE) パラメーター 必須 説明 grant_typeはい コードをトークンと交換するには、値を authorization_codeに設定します。コードはい 認証エンドポイントから受信した認証コード。 redirect_uriはい 最初の認証要求で使用される URI。 例:https://yourapp.com/callback
client_idはい クライアントアプリケーションの一意の識別子。 code_verifierはい PKCE code_challengeの生成に使用された元の文字列。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. トークン要求パラメーター (プライベートクライアント/クライアントシークレット) パラメーター 必須 説明 grant_typeはい コードをトークンと交換するには、値を authorization_codeに設定します。コードはい 認証エンドポイントから受信した認証コード。 redirect_uriはい 最初の認証要求で使用される URI。 例:https://yourapp.com/callback
client_idはい クライアントアプリケーションの一意の識別子。 client_secretはい トークンエンドポイントでの認証に使用されるクライアントのシークレット。 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はい トークンエンドポイントでの認証に使用されるクライアントシークレット。