この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Web サーバ OAuth 認証フローでのアプリケーションの認証

セキュアなサーバ上でホストされているアプリケーションは、Web サーバ認証フローを使用します。Web サーバフローでの重要な点は、サーバがコンシューマの秘密を保護できる必要があるということです。また、フロー内でコード確認と検証値を使用して、認証コードの傍受を防ぐことができます。

このフローでは、クライアントアプリケーションは、他の Web サーバまたはリソースにユーザをリダイレクトするように認証サーバに要求します。Web サーバまたはリソースは、ユーザを認証してアプリケーションに認証コードを送信します。アプリケーションは認証コードを使用してアクセストークンを要求します。このフローの手順は、次のとおりです。

Web サーバ OAuth 認証フロー
  1. アプリケーションはユーザを適切な Salesforce 認証エンドポイント (https://login.salesforce.com/services/oauth2/authorize など) にリダイレクトします。次のパラメータは必須です。
    パラメータ 説明
    response_type この認証フローの場合、code にする必要があります。
    client_id 接続アプリケーション定義の [コンシューマ鍵]
    redirect_uri 接続アプリケーション定義の [コールバック URL]
    次のパラメータは省略可能です。
    パラメータ 説明
    code_challenge トークン要求で code_verifier 値の SHA256 ハッシュ値を指定して、認証コードの傍受攻撃を防ぐのに役立てます。ハッシュ値は、https://tools.ietf.org/html/rfc4648#section-5 の定義に従って base64url エンコードする必要があります。
    • 認証要求で code_challenge 値が指定され、トークン要求で code_verifier 値が指定されている場合、Salesforce により code_challengecode_verifier と比較されます。code_challenge が無効であるか一致しない場合、ログインが invalid_request エラーコードで失敗します。
    • 認証要求で code_challenge 値が指定されていても、トークン要求で code_verifier 値が指定されていない場合、ログインが invalid_grant エラーコードで失敗します。

    この値を base64urlonly で 1 回エンコードします。

    メモ

    display ログインページの表示の種類を変更します。有効な値は、次のとおりです。
    • page — 全画面のページ認証。これは、値が指定されていない場合のデフォルト値です。
    • popup — 最新の Web ブラウザのポップアップウィンドウ用に最適化されたコンパクトなダイアログ。
    • touch — Android や iPhone など、最新のモバイルデバイス用に設計されたモバイル用に最適化されたダイアログ。
    • mobile — BlackBerry OS 5 など、タッチスクリーンをサポートしていないモバイルデバイス用に設計された、モバイル用に最適化されたダイアログ。
    immediate ログインと承認をユーザに要求するかどうかを決定します。値は、truefalse のいずれかです。デフォルトは false です。
    • true に設定され、ユーザが現在ログインしており、以前にこのアプリケーションを承認している場合、承認ステップはスキップされます。
    • true に設定され、ユーザがログインしていないか、これまでこのアプリケーションを承認したことがない場合、セッションはただちにエラーコード immediate_unsuccessful で終了します。
    login_hint ログインページにユーザ名を自動入力するための、有効なユーザ名の値を指定します。たとえば、login_hint=username@company.com です。ユーザのブラウザにすでに有効なセッションがある場合は、login_hint パラメータの影響はなく、有効なユーザセッションが継続されます。
    nonce 応答で返される値を指定します。このパラメータは、「リプレイ」攻撃の検出に役立ちます。ユーザ ID トークンを取得する場合の openid 範囲に使用できます (省略可能)。
    prompt 認証サーバがユーザに再認証および再承認を求める方法を指定します。このパラメータは省略可能です。Salesforce でサポートされる値は、次のとおりです。
    • login — 認証サーバがユーザに再認証を求める必要があり、ユーザに強制的に再ログインさせます。
    • consent — クライアントに情報を戻す前に、認証サーバがユーザに再認証を求める必要があります
    ユーザにログインおよび再認証の両方を求めるには、スペースで区切られた両方の値を渡すことが有効です。次に例を示します。
    scope アプリケーションがアクセスできるデータを指定します。詳細は、Salesforce ヘルプの「範囲パラメータの値」を参照してください。
    state 承認後にコールバック URL で返される、追加の URL 符号化された状態データを指定します。
    次の例は、認証の URL を示しています。
  2. ユーザが自分のログイン情報で Salesforce にログインします。ユーザは認証エンドポイントを直接操作するため、アプリケーションがユーザのログイン情報を認識することはありません。ログインに成功したら、ユーザはアプリケーションを認証するように要求されます。ユーザがすでにアプリケーションを認証している場合、このステップはスキップされます。
  3. クライアントアプリケーションが認証されたことが Salesforce で確認されると、エンドユーザの Web ブラウザは、redirect_uri パラメータで指定されたコールバック URL にリダイレクトされます。Salesforce は、認証情報を次の値でリダイレクト URL に付加します。
    パラメータ 説明
    code コンシューマがアクセストークンと更新トークンを取得するために使用する必要がある認証コード。認証コードの有効期限は 15 分です。
    state 最初の要求の一部として渡される状態値 (該当する場合のみ)。
    次の例は、認証情報が付属するコールバック URL を示しています。
  4. アプリケーションは認証コードを抽出して、これをアクセストークン要求に含めて Salesforce に渡す必要があります。この要求は、適切な Salesforce トークン要求エンドポイント (https://login.salesforce.com/services/oauth2/token など) に対して送信される POST 要求です。次のパラメータは必須です。
    パラメータ 説明
    grant_type このフローの値は authorization_code である必要があります。
    client_secret 接続アプリケーション定義の [コンシューマの秘密][Web サーバフローの秘密が必要] 設定が接続アプリケーション定義で有効になっていない場合を除き、必須です。client_secret が必須ではなくても、接続アプリケーションが認証要求で送信した場合は、Salesforce は認証を試みます。
    client_id 接続アプリケーション定義の [コンシューマ鍵]
    redirect_uri 接続アプリケーション定義の [コールバック URL]
    code コンシューマがアクセストークンと更新トークンを取得するために使用する必要がある認証コード。認証コードの有効期限は 15 分です。
    次のパラメータは省略可能です。
    パラメータ 説明
    client_assertion client_secret を渡す代わりに、client_assertion および client_assertion_type を提供できます。client_secret パラメータが指定されていない場合、Salesforce によって自動的に client_assertion および client_assertion_type がチェックされます。client_assertion の値は、OAuth コンシューマがアップロードした証明書に関連付けられている非公開鍵で署名された一般的な JWT ベアラートークンである必要があります。RS256 アルゴリズムのみサポートされています。client_assertion の使用についての詳細は、private_key_jwt クライアント認証メソッドの「OpenID Connect の仕様」を参照してください。
    client_assertion_type client_assertion パラメータを使用するときにこの値を指定します。client_assertion_type の値は、urn:ietf:params:oauth:client-assertion-type:jwt-bearer でなければなりません。
    code_verifier 高エントロピの 128 バイトのランダムなデータを指定して値の推測を困難にすることで、認証コードの傍受攻撃を防ぐのに役立てます。この値も、https://tools.ietf.org/html/rfc4648#section-5 の定義に従って base64url エンコードする必要があります。
    • トークン要求で code_verifier 値が指定され、認証要求で code_challenge 値が指定されている場合、Salesforce により code_verifiercode_challenge と比較されます。code_verifier が無効であるか一致しない場合、ログインが invalid_grant エラーコードで失敗します。
    • トークン要求で code_verifier 値が指定されていても、認証要求で code_challenge 値が指定されていない場合、ログインが invalid_grant エラーコードで失敗します。

    この値を base64url でエンコードするのは 1 回のみです。

    メモ

    format 期待される戻り形���。デフォルトは、json です。値は次のとおりです。
    • urlencoded
    • json
    • xml
    返される形式は、要求のヘッダーに次のいずれかを使用して指定することもできます。
    • Accept: application/x-www-form-urlencoded
    • Accept: application/json
    • Accept: application/xml
    次の例は、本文で client_idclient_secret を送信するアクセストークン POST 要求を示しています。

    POST 要求の本文でクライアントのログイン情報をパラメータとして送信する代わりに、Salesforce では HTTP 基本認証スキームがサポートされています。このスキーマでは、次のように要求の認証ヘッダーに client_idclient_secret が必要です。

    Authorization: Basic64Encode(client_id:secret)

    client_idclient_secret はコロン (:) で区切ります。詳細は、「OAuth 2.0 認証フレームワーク」を参照してください。

    次の例は、(POST 要求の本文でクライアントのログイン情報を送信する代わりに) HTTP 基本認証スキームを使用するアクセストークン POST 要求を示します。

    client_idclient_secret が POST の本文で送信される場合、認証ヘッダーは無視されます。

    メモ

  5. この要求が成功した場合、サーバは次の内容を持つレスポンスボディを返します。
    パラメータ 説明
    access_token アプリケーションが要求を行うために使用するセッション ID として機能するアクセストークン。このトークンは、ユーザログイン情報と同様に保護する必要があります。
    token_type 値は、アクセストークンを含むすべての応答の Bearer です。
    refresh_token 新しいアクセストークンを取得するために将来使用できるトークン。

    この値は秘密です。ユーザのパスワードなどと同様に取り扱い、適切な手段で管理してください。

    警告

    instance_url API コールの送信先となる Salesforce インスタンスを示します。
    id ユーザを識別し、ユーザの詳細を照会するために使用できる ID URL。エンドユーザに関する詳細な情報を取得するための HTTP 要求で使用できます。
    issued_at 署名が作成された日時。UNIX エポック (1970 年 1 月 1 日 00:00:00 UTC) からの秒数として表されます。
    signature 連結 ID と issued_at 値を含む client_secret (非公開鍵) で署名されている Base64 符号化された HMAC-SHA256 署名。signature を使用して、ID URL がサーバから送信されたときに変更されなかったことを確認します。
    次の例は、JSON レスポンスボディを示しています。
  6. アプリケーションは、提供されたアクセストークンと更新トークンを使用して保護されたユーザデータにアクセスします。