> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Auth0 テナントで送信者制約を設定する方法の概要。

# 送信者制約を設定する

[送信者拘束](/docs/ja-jp/secure/sender-constraining) は、アクセストークンと <Tooltip tip="Refresh Token: ユーザーに再度ログインさせることなく、新しいアクセストークンを取得するために使用されるトークン。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=refresh+tokens">リフレッシュトークン</Tooltip> を、それらを取得した特定のクライアントアプリケーションに暗号学的に結び付ける <Tooltip tip="OAuth 2.0: 認可のプロトコルとワークフローを定義する認可フレームワーク。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=OAuth+2.0">OAuth 2.0</Tooltip> および <Tooltip tip="OAuth 2.0: 認可のプロトコルとワークフローを定義する認可フレームワーク。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=OpenID">OpenID</Tooltip> Connect (OIDC) のセキュリティメカニズムであり、トークンの盗難や不正利用を防ぎます。

Auth0 は、mTLS による送信者拘束と Demonstrating Proof-of-Possession (DPoP) をサポートしています。クライアントアプリケーションで送信者拘束を有効にする場合は、API 呼び出し先の <Tooltip tip="Resource Server: 保護されたリソースをホストするサーバー。リソースサーバーは、保護されたリソースへのリクエストを受け入れ、応答します。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=resource+server">リソースサーバー</Tooltip> に対しても必ず適用する必要があります。

Auth0 で送信者拘束を設定するには、次の設定が必要です。

* [クライアントアプリケーションで送信者拘束を設定する](#configure-sender-constraining-for-a-client-application)
* [リソースサーバーで送信者拘束を設定する](#configure-sender-constraining-for-a-resource-server)

<div id="how-it-works">
  ## 仕組み
</div>

<Tooltip tip="アクセストークン: API へのアクセスに使用される認可資格情報で、不透明な文字列または JWT の形式です。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Access+tokens">アクセストークン</Tooltip> は、クライアントアプリケーションとリソースサーバーで送信者拘束をどのように設定しているかに応じて、Auth0 で送信者拘束されます。

1. **要求された audience:** token request で、要求された audience が `/userinfo` のみか、[`/userinfo`](https://auth0.com/docs/api/authentication/user-profile/get-user-info) endpoint でのみ使用することを意図しているか、または openid scope も要求した場合に `/userinfo` を含む可能性があるカスタム API かによって、アクセストークンが送信者拘束されるかどうかが決まります。
2. **クライアントアプリケーション:** クライアントアプリケーションで送信者拘束を `required` に設定しているかどうか。
3. **リソースサーバー:** リソースサーバーで送信者拘束を設定しているかどうか。

   1. `none`: リソースサーバーで送信者拘束を設定していません。
   2. `allowed`: 送信者拘束方式を設定することで、リソースサーバーで送信者拘束を有効にしています。
   3. `required`: リソースサーバーで送信者拘束を必須として設定しており、アクセストークンはアプリケーションに送信者拘束されている必要があることを意味します。送信者拘束は、すべてのアプリケーションまたはパブリックアプリケーションのみに対して必須にできます。送信者拘束方式の設定が必要です。

<Callout icon="lightbulb" color="#0EA5E9" iconType="regular">
  送信者拘束方式として mTLS を使用する場合、送信者拘束は常にすべてのアプリケーションで必須になります。mTLS はパブリックアプリケーションをサポートしていないため、mTLS の送信者拘束をパブリッククライアントのみに限定することはできません。
</Callout>

* **Proof-of-Possession:** token request で、クライアントアプリケーションが proof-of-possession アサーションを送信したかどうか。

  * mTLS 送信者拘束: TLS ハンドシェイク中に、クライアントが特定の秘密キー (client certificate に関連付けられたもの) を正常に提示することで、proof of possession が示されます。
  * DPoP: クライアントが自身の秘密キーで暗号学的に署名して DPoP Proof JWT を作成し、関連するアクセストークンを使用するすべての request の DPoP HTTP header に `DPoP` Proof JWT を含めることで、proof of possession が実現されます。

次の表は、さまざまなクライアント request parameter と Auth0 リソースサーバーの設定に基づいて、アクセストークンがどのように発行されるか、および送信者拘束されるかどうかを示しています。

| 要求された audience の種類               | クライアントで PoP が必須か | クライアントから Proof-of-Possession (PoP) が送信されたか | Auth0 リソースサーバーポリシー: None | Auth0 リソースサーバーポリシー: Allowed (必須ではない) | Auth0 リソースサーバーポリシー: Required |
| -------------------------------- | ---------------- | ------------------------------------------ | ------------------------ | ------------------------------------ | ---------------------------- |
| Userinfo のみ                      | いいえ              | いいえ                                        | 発行される、送信者拘束なし            | N/A                                  | N/A                          |
| Userinfo のみ                      | いいえ              | はい                                         | 発行される、送信者拘束あり            | N/A                                  | N/A                          |
| Userinfo のみ                      | はい               | いいえ                                        | 発行されない                   | N/A                                  | N/A                          |
| Userinfo のみ                      | はい               | はい                                         | 発行される、送信者拘束あり            | N/A                                  | N/A                          |
| カスタム audience (Userinfo を含む場合あり) | いいえ              | いいえ                                        | 発行される、送信者拘束なし            | 発行される、送信者拘束なし                        | 発行されない                       |
| カスタム audience (Userinfo を含む場合あり) | いいえ              | はい                                         | 発行される、送信者拘束なし            | 発行される、送信者拘束あり                        | 発行される、送信者拘束あり                |
| カスタム audience (Userinfo を含む場合あり) | はい               | いいえ                                        | 発行されない                   | 発行されない                               | 発行されない                       |
| カスタム audience (Userinfo を含む場合あり) | はい               | はい                                         | 発行されない                   | 発行される、送信者拘束あり                        | 発行される、送信者拘束あり                |

<div id="configure-sender-constraining-for-a-client-application">
  ## クライアントアプリケーションの送信者制約を設定する
</div>

クライアントアプリケーションで送信者制約を必須にすると、アクセストークンはそのアプリケーションに拘束されます。Auth0 はリクエストを検証し、トークンを要求したアプリケーションだけが、そのトークンを使って関連するリソースにアクセスできることを保証します。

クライアントアプリケーションで送信者制約を必須にするよう設定したら、リソースサーバーの設定時に、送信者制約の方式として mTLS または DPoP を指定できます。

クライアントアプリケーションの送信者制約は、<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要製品です。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> または <Tooltip tip="Management API: 管理タスクを実行するための製品です。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Management+API">Management API</Tooltip> で設定できます。

<Tabs>
  <Tab title="Auth0 Dashboard">
    1. [Dashboard > Applications > Applications](https://manage.auth0.com/#/applications) に移動し、設定するアプリケーションを選択します。
    2. **設定** の **Token Sender-Constraining** までスクロールします。
    3. **Require Sender Constraining** をオンにします。アプリケーションの送信者制約の必須設定を解除するには、オフにします。

    <Frame>
      <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3BoGW9NEYKPBkfk2tPBL7l/0f884ac3f64f17b23fd6a0e9436bb472/Screenshot_2024-07-23_at_1.30.19_PM.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=085696f753798fd16adf27de995d4b93" alt="" width="1900" height="380" data-path="docs/images/cdy7uua7fh8z/3BoGW9NEYKPBkfk2tPBL7l/0f884ac3f64f17b23fd6a0e9436bb472/Screenshot_2024-07-23_at_1.30.19_PM.png" />
    </Frame>
  </Tab>

  <Tab title="Management API">
    クライアントの送信者制約を設定するには、[Management API](https://auth0.com/docs/api/management/v2) を使用します。

    クライアントで送信者制約を必須にするには、[クライアント設定の更新](https://auth0.com/docs/api/management/v2/clients/patch-clients-by-id) エンドポイントに PATCH リクエストを送信します。`require_proof_of_possession` パラメーターを `true` に設定します。

    ```bash lines theme={null}
    curl -L -X PATCH 'https://{YOUR_DOMAIN}/api/v2/clients/{YOUR_CLIENT_ID}' \
    -H 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{"require_proof_of_possession": true}'
    ```

    送信者制約の必須設定を解除するには、`require_proof_of_possession` パラメーターを `false` に設定します。

    ```bash lines theme={null}
    curl -L -X PATCH 'https://{YOUR_DOMAIN}/api/v2/clients/{YOUR_CLIENT_ID}' \
    -H 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{"require_proof_of_possession": false}'
    ```
  </Tab>
</Tabs>

<div id="configure-sender-constraining-for-a-resource-server">
  ## リソースサーバーの送信者拘束を設定する
</div>

Auth0 が発行するアクセストークンは、リソースサーバー上の API にアクセスする送信者 (つまりクライアントアプリケーション) に紐付けることができます。

Auth0 Dashboard または Management API を使用して、リソースサーバーの送信者拘束を設定できます。

<Tabs>
  <Tab title="Auth0 Dashboard">
    トークンバインディングまたは送信者拘束を有効にするには、API の **API Settings** を設定します。

    1. [Auth0 Dashboard > Applications > APIs](https://manage.auth0.com/#/apis) に移動します。
    2. 設定する API を選択します。
    3. **Settings** タブで、**Token Sender-Constraining** セクションを探します。
    4. 次の項目を設定します。

       1. Sender Constraining Method:

          1. **None:** リソースサーバーで送信者拘束方式を有効にしません。
          2. **mTLS**: リソースサーバーの送信者拘束方式として mTLS を有効にします。
          3. **DPoP:** リソースサーバーの送信者拘束方式として DPoP を有効にします。

       2. Require Token Sender Constraining: この API に適用する送信者拘束ポリシーを選択します。

          1. **Always:** すべてのアプリケーションで送信者拘束を必須にします。mTLS を使用する場合に選択できるのはこのオプションのみです。
          2. **For Public Applications:** 公開アプリケーションでのみ送信者拘束を必須にします。このオプションは mTLS 使用時には利用できません。
          3. **Never:** 送信者拘束は必須ではありません。

    <Frame>
      <img src="https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/sender-constraining/method_is_dpop.png?fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=b7f76413d34c6af23036226aba453787" alt="Auth0 Dashboard > APIs > Settings > トークンバインディング" data-og-width="1970" width="1970" data-og-height="1276" height="1276" data-path="docs/images/sender-constraining/method_is_dpop.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/sender-constraining/method_is_dpop.png?w=280&fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=6f4f79010529a5842bc2c54368743d93 280w, https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/sender-constraining/method_is_dpop.png?w=560&fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=759304503a591f4032c5413610b0430d 560w, https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/sender-constraining/method_is_dpop.png?w=840&fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=e8aef6f46f6eb115439c4828a9f45e74 840w, https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/sender-constraining/method_is_dpop.png?w=1100&fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=9d3c782898c0bd7a14e563cfca6c5d27 1100w, https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/sender-constraining/method_is_dpop.png?w=1650&fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=f15270df1d77f18635b3e91e92613d46 1650w, https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/sender-constraining/method_is_dpop.png?w=2500&fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=3c1d533e4a62015cfd7f768121a56a39 2500w" />
    </Frame>
  </Tab>

  <Tab title="Management API">
    Management API で送信者制約を有効にするには、[リソースサーバーを更新する](https://auth0.com/docs/api/management/v2/resource-servers/patch-resource-servers-by-id) PATCH リクエストを送信します。`proof_of_possession` オブジェクトのパラメーターを次のように設定します。

    | Parameter      | Description                                                                                                                                                                                                  |
    | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `mechanism`    | 送信者拘束方式を設定します。指定できる値は `none`、`mtls`、`dpop` です。                                                                                                                                                               |
    | `required`     | 必須です。`true` に設定すると、この API 向けにアプリケーションへ発行されるアクセストークンは、そのアプリケーションに制約されます。この要件をどのアプリケーション種別に適用するかは `required_for` で指定します。`false` に設定すると、送信者拘束は必須ではありません。                                                        |
    | `required_for` | `required` が `true` の場合に、どのアプリケーション種別で送信者拘束を必須にするかを絞り込みます。指定できる値は `all_clients` (すべてのアプリケーション) または `public_clients` (公開アプリケーションのみ) です。指定しない場合のデフォルトは `all_clients` です。mTLS を使用する場合、有効なのは `all_clients` のみです。 |

    次のコードサンプルは、リソースサーバーに mTLS 送信者制約を設定するリクエストボディの例です。mTLS では `required_for` に `all_clients` のみがサポートされます (これがデフォルトであるため、指定は不要です) 。

    ```bash lines theme={null}
    curl -L -X PATCH 'https://{YOUR_DOMAIN}/api/v2/resource-servers/{YOUR_RESOURCE_SERVER_ID}' \
    -H 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -d '{
      "proof_of_possession": {
        "mechanism": "mtls",
        "required": true
      }
    }'
    ```

    次のコードサンプルは、公開アプリケーションでのみ必須となる DPoP 送信者制約をリソースサーバーに設定するリクエストボディの例です。

    ```bash lines theme={null}
    curl -L -X PATCH 'https://{YOUR_DOMAIN}/api/v2/resource-servers/{YOUR_RESOURCE_SERVER_ID}' \
    -H 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -d '{
      "proof_of_possession": {
        "mechanism": "dpop",
        "required": true,
        "required_for": "public_clients"
      }
    }'
    ```

    次のコードサンプルは、すべてのアプリケーションで必須となる DPoP 送信者制約を設定します。`all_clients` はデフォルト値のため、`required_for` は省略できます。

    ```bash lines theme={null}
    curl -L -X PATCH 'https://{YOUR_DOMAIN}/api/v2/resource-servers/{YOUR_RESOURCE_SERVER_ID}' \
    -H 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -d '{
      "proof_of_possession": {
        "mechanism": "dpop",
        "required": true
      }
    }'
    ```

    次のコードサンプルは、リソースサーバーの送信者拘束を無効にします (Auth0 Dashboard で "Never" を選択するのと同じです) 。

    ```bash lines theme={null}
    curl -L -X PATCH 'https://{YOUR_DOMAIN}/api/v2/resource-servers/{YOUR_RESOURCE_SERVER_ID}' \
    -H 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -d '{
      "proof_of_possession": null 
    }'
    ```
  </Tab>
</Tabs>
