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

  • リリースバージョン: Australia
  • 更新日 2026年06月17日
  • 所要時間:9分
  • ServiceNow® は、認証およびリソースサーバーとして機能することで、認証と API アクセスの両方を処理します。シングルサインオン (SSO) を有効にすると、認証のために構成された IdP にユーザーがリダイレクトされ、ログインが成功するとトークンが発行されます。

    始める前に

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

    このタスクについて

    このトピックコレクションでは、認証サーバーとリソースサーバーの両方として機能する場合に、 ServiceNow が認証と API アクセスを管理する方法について説明します。SSO が有効になっているときの動作について説明します。これには、ユーザー認証のための ID プロバイダー (IdP) へのリダイレクトや、認証成功後の ServiceNow による認証コードの発行などが含まれます。認証コードを使用することで、 ServiceNow はトークンの発行と保護されたリソースへのアクセスを引き続き制御できます。

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

    手順

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

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

    2. 認証要求を開始します。
      クライアントはユーザーを認証エンドポイント 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 に設定され、アップグレードされたインスタンスではオプションですステータスパラメーターがない場合、認証要求は失敗し、次のエラーが表示されます:要求にステータスパラメーターがありません
    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. トークン要求パラメーター (プライベートクライアント/クライアントシークレット)
      パラメーター 必須 説明
      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 で返され、クライアントはそれを検証できます。
    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 はい トークンエンドポイントでの認証に使用されるクライアントシークレット。