サーバー間インテグレーション用の OAuth 2.0 クライアントログイン情報フロー
ユーザーの介在なしで 2 つのアプリケーション間で情報を直接共有する必要がある場合があります。このようなシナリオでは、OAuth 2.0 クライアントログイン情報フローを使用できます。このフローでは、外部クライアントアプリケーションによってアクセストークン用に接続アプリケーションで定義されたクライアントログイン情報 (コンシューマー鍵とコンシューマーの秘密) が交換されます。このフローでは明示的なユーザー操作の必要はなくなりますが、インテグレーションを実行するインテグレーションユーザーを指定する必要があります。このフローを、OAuth 2.0 ユーザー名パスワードフローに代わるより安全な方法として使用できます。
必要なエディション
| 使用可能なインターフェース: Salesforce Classic および Lightning Experience の両方 |
| 使用可能なエディション: すべてのエディション |
クライアントログイン情報フローを使用するには、外部クライアントアプリケーションを作成し、その OAuth 設定とアクセスポリシーを設定する必要があります。
たとえば、Salesforce から自動レポートを実行するカスタムアプリケーションを作成します。アプリケーションで毎晩レポートを実行したいと考えています。カスタムアプリケーションを Salesforce と統合するには、外部クライアントアプリケーションを設定します。次に、クライアントログイン情報フローの外部クライアントアプリケーションを設定するには、フローを有効にしてインテグレーションユーザーを割り当てます。夜間のレポートサービスが開始されると、カスタムアプリケーションは次の手順の概要に従って Salesforce データにアクセスします。
- 外部クライアントアプリケーションは、POST 要求を介してクライアントのログイン情報を Salesforce OAuth トークンエンドポイントに送信します。
- Salesforce はクライアントログイン情報を検証し、アプリケーションを認証します。
- 割り当てたインテグレーションユーザーに代わって、Salesforce がアクセストークンを返します。
- 外部クライアントアプリケーションはアクセストークンを使用して、REST API などの Salesforce API をコールします。
- API は、レポート用の要求されたデータを使用して応答します。
アクセストークンの要求
クライアントログイン情報フローでアクセストークンを取得するプロセスを詳しく説明します。
フローを開始するために、外部クライアントアプリケーションはクライアントログイン情報を Salesforce トークンエンドポイントに投稿します。クライアントログイン情報をパラメーターとしてリクエストボディに含めることができます。または、セキュリティを強化するために、クライアントログイン情報を基本認証ヘッダーに配置します。
リクエストボディにクライアントログイン情報が含まれる POST 要求の例を次に示します。
POST /services/oauth2/token HTTP/1.1
Host: MyDomainName.my.salesforce.com
grant_type=client_credentials&
client_id=*******************&
client_secret=*******************このフローでは、https://login.salesforce.comおよびhttps://test.salesforce.comへの要求はサポートされていません。代わりに [私のドメイン] の URL を使用します。[私のドメイン] の URL を見つけるには、[設定] から、[クイック検索] ボックスに「私のドメイン」と入力し、[私のドメイン] を選択します。
これらのパラメーターを要求に含める必要があります。
| パラメーター | 説明 |
|---|---|
client_id |
外部クライアントアプリケーションのコンシューマー鍵。コンシューマー鍵にアクセスするには、外部クライアントアプリケーションマネージャーで外部クライアントアプリケーションを見つけて、ドロップダウンから [Edit Settings (設定の編集)] を選択します。次に、[OAuth 設定] セクションを展開し、[コンシューマー鍵と秘密] をクリックします。コンシューマー鍵を表示する前に、ID を検証するように求められることがあります。 |
client_secret |
外部クライアントアプリケーションのコンシューマーの秘密。コンシューマーの秘密にアクセスするには、External Client App Manager から外部クライアントアプリケーションを見つけて、ドロップダウンから [Edit Settings (設定の編集)] を選択します。次に、[OAuth Settings (OAuth 設定)] セクションを展開し、[Consumer Key and Secret (コンシューマー鍵と秘密)] をクリックします。コンシューマーの秘密を表示する前に、ID を検証するように求められることがあります。 |
grant_type |
外部クライアントアプリケーションが要求する OAuth 2.0 許可種別。クライアントログイン情報フローの場合、この値を クライアントログイン情報許可種別についての詳細は、Internet Engineering Task Force の「OAuth 2.0 Authorization Framework (OAuth 2.0 認証フレームワーク)」の「4.4 Client Credentials Grant (4.4 クライアントログイン情報許可)」セクションを参照してください。 |
基本認証ヘッダーにクライアントログイン情報が含まれる例を次に示します。この形式では、client_id は client_id:client_secret 形式で client_secret に追加され、結果の値は Base64 でエンコードされます。
POST /services/oauth2/token HTTP/1.1
Host: MyDomainName.my.salesforce.com
Header: Authorization: Basic
TXlDbGllbnRJRDpNeUNsaWVudFNlY3JldA==
grant_type=client_credentialsこの形式を使用する場合、grant_type がリクエストボディの唯一の必須パラメーターになります。grant_type は client_credentials に設定する必要があります。
Salesforce によるアクセストークンの付与
クライアントログイン情報が検証されると、Salesforce によりアクセストークンと要求された範囲を含む応答が返されます。アプリケーションはアクセストークンを使用して、Salesforce 内の保護されているデータにアクセスできす。
JSON 形式のアクセストークン応答の例を次に示します。
{
"access_token": "*******************",
"instance_url": "https://yourInstance.salesforce.com",
"id": "https://login.salesforce.com/id/XXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXX",
"token_type": "Bearer",
"scope": "id api",
"issued_at": "1657741493799",
"signature": "c2lnbmF0dXJl"
}これらのパラメーターは応答に含まれます。
| パラメーター | 説明 |
|---|---|
access_token
|
外部クライアントアプリケーションがクライアントアプリケーションの代わりに保護されたリソースへのアクセスを要求するために使用する OAuth トークン。範囲の形式の追加権限にはアクセストークンが付随することがあります。 |
instance_url
|
ユーザーの組織のインスタンスを示す URL。例: https://yourInstance.salesforce.com/。 |
id
|
組織とインテグレーションユーザーを識別するために使用できる ID URL。URL の形式は https://login.salesforce.com/id/orgID/userID です。 |
token_type
|
Bearer トークン種別。アクセストークンを含むすべての応答で使用します。
|
scope
|
アクセストークンに関連付けられている範囲。 範囲は、クライアントがアクセスできる保護されたリソースの種別をさらに定義します。範囲を作成するときに外部クライアントアプリケーションに割り当て、認証フロー中に OAuth トークンに含めます。 クライアントログイン情報フローでは UI セッションがサポートされず、更新トークンが発行されないため、Salesforce では次の範囲が自動的に除外されます。
詳細は、「OAuth トークンおよび範囲」を参照してください。 |
issued_at
|
署名が作成されたときのタイムスタンプ (ミリ秒)。 |
signature
|
client_secret で署名されている Base64 エンコードされた HMAC-SHA256 署名。署名には連結 ID と issued_at 値を含めることができます。これらを使用して ID URL がサーバーから送信された後に変更されていないことを確認できます。 |

