認証コード権限許可ワークフロー

  • リリースバージョン: Zurich
  • 更新日 2026年03月12日
  • 所要時間:9分
  • OAuth 認証コード権限許可は、ユーザーの同意を得てユーザーデータにアクセスする Web、モバイル、またはデスクトップアプリで広く使用されている安全で広く使用されているフローです。プライベートクライアント (クライアントシークレットを使用) とパブリッククライアント (PKCE を使用) の両方をサポートします。

    始める前に

    必要なロール: oauth_admin、mi_admin、admin

    このタスクについて

    このトピックコレクションでは、クライアントアプリケーションが認証コード権限許可フローを使用して ServiceNow からトークンを取得し、そのトークンを使用して API 呼び出しを行う方法について説明します。プライベートクライアントはクライアントシークレットを使用し、パブリッククライアントは PKCE コードチャレンジを使用します。

    図 : 1. 認証ワークフロー
    認証ワークフロー

    手順

    1. クライアントアプリケーションからログインします。

      ユーザーは、クライアントアプリケーションインターフェイスからログインプロセスを開始します。

    2. 認証要求を開始します。

      クライアントは、ユーザーを 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 で返され、クライアントはそれを検証できます。
    3. ログインし、クライアントアプリケーションにアクセス同意を付与します。
      ServiceNow (SSO が有効になっている場合は IdP) にログインし、クライアントアプリケーションにアクセスの同意を付与します。
    4. ServiceNow (SSO が有効な場合は IdP) が認証情報を検証し ServiceNow クライアントに認証コードを返します。
      認証が成功すると、ブラウザーは redirect_uriにリダイレクトされ、認証コードがクエリ文字列に含まれます。
      https://yourapp.com/callback?code=AUTH_CODE&state=xyz123
      
    5. 認証要求を開始します。

      クライアントは、アクセストークンを取得するためにユーザーを 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 で返され、クライアントはそれを検証できます。
    6. アクセストークンを使用して ServiceNow API にアクセスします。
      例:
      アクセストークンを使用して、API への GET 要求を行います。Authorization ヘッダーにアクセストークンを含めます。
      Method: GET
      End Point: https://<servicenow_base_url>/api/now/incident  
      Authorization: Bearer YOUR_ACCESS_TOKEN
    7. アクセストークンが期限切れになっている場合は更新します。
      次のパラメーターを使用して、アクセストークンを更新する 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 はい トークンエンドポイントでの認証に使用されるクライアントシークレット。