> ## 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.

> エンタープライズ接続向けに Private Key JWT Client Authentication を実装する方法を学びます。

# Okta および OIDC 接続向け Private Key JWT Client Authentication

Private Key <Tooltip tip="JSON Web トークン (JWT): 2 者間でクレームを安全にやり取りするために使用される標準的な ID トークン形式（多くの場合、Access Token の形式としても使用されます）。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=JWT">JWT</Tooltip> Client Authentication は、<Tooltip tip="JSON Web トークン (JWT): 2 者間でクレームを安全にやり取りするために使用される標準的な ID トークン形式（多くの場合、Access Token の形式としても使用されます）。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=OpenID">OpenID</Tooltip> Connect (OIDC) および Okta Workforce エンタープライズ接続における、クライアント認証の代替方式です。クライアント認証は通常、共有された <Tooltip tip="Client Secret: クライアント（アプリケーション）が認可サーバーに対して認証するために使用する Secret です。クライアントと認可サーバーのみが知るべきものであり、推測されないよう十分にランダムである必要があります。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=client+secret">client secret</Tooltip> を送信して行いますが、Private Key JWT Client Authentication では、その代わりに署名付き JWT を送信することで、アプリケーションのセキュリティを強化します。

この機能を使用すると、標準的な client secret 認証でよく見られる、次のような一般的なセキュリティ上の問題を回避できます。

* client secret はリクエストごとに当事者間で送信する必要があるため、傍受や再利用のリスクが高まります。
* 有効期限の適用や、悪意のある第三者による再利用を防ぐための仕組みが限られています。
* 双方が client secret を保持するため、漏えいや露出のリスクが高まります。

OIDC および Okta Workforce エンタープライズ接続向けの Private Key JWT Client Authentication は、<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要な製品です。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> または <Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要な製品です。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Management+API">Management API</Tooltip> のいずれかから設定できます。

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

OIDC 接続フローでは、`/oauth/token` や `/oauth/par` などの認証済みエンドポイントを使用して、クライアントの身元を <Tooltip tip="認可サーバー: ユーザーのアクセス範囲の境界を定義することに寄与する集約サーバー。たとえば、認可サーバーはユーザーが利用できるデータ、タスク、機能を制御できます。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=authorization+server">認可サーバー</Tooltip> または OpenID プロバイダーに対して検証します。Private Key JWT Client Authentication では、client secret の代わりに、署名付きのクライアントアサーション JWT が OpenID プロバイダーに渡されます。

クライアントアサーション JWT には、次のクレームが含まれます。

* OpenID プロバイダーの <Tooltip tip="Audience: 発行されたトークンの audience の一意な識別子。トークンでは aud という名前で表され、その値には、ID トークンの場合はアプリケーション (Client ID) の ID、Access Token の場合は API (API 識別子) の ID が含まれます。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=token+endpoint">トークンエンドポイント</Tooltip> を識別する `aud` (<Tooltip tip="Audience: 発行されたトークンの audience の一意な識別子。トークンでは aud という名前で表され、その値には、ID トークンの場合はアプリケーション (Client ID) の ID、Access Token の場合は API (API 識別子) の ID が含まれます。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=audience">audience</Tooltip>) 。
* 1 回限りの使用やリプレイ攻撃対策を可能にする `jti` (JWT ID) 。
* トークンの有効期間を制限する `exp` (有効期限) 。
* <Tooltip tip="Client ID: Auth0 から登録済みリソースに付与される識別値です。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=client+ID">client ID</Tooltip> を識別する `sub` と `iss`。

Private Key JWT Client Authentication は、共有 client secret を使わないことで、より安全な認証方法を提供します。代わりに、JWT はクライアントの秘密鍵で署名され、OpenID プロバイダーがアクセスできるのは公開鍵のみです。

<div id="private-key-jwt-client-authentication-flow">
  ### Private Key JWT Client Authentication フロー
</div>

ユーザーが上流の<Tooltip tip="アイデンティティプロバイダー（IdP）: デジタル ID を保存・管理するサービス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=identity+provider">アイデンティティプロバイダー</Tooltip> (IdP) での認証を完了すると、認可コードとともに Auth0 にリダイレクトされます。この認可コードは、OpenID プロバイダーのトークンエンドポイントでトークンと交換されます。接続で Private Key JWT が有効になっている場合、OpenID プロバイダーのトークンエンドポイントへの呼び出しでは、より安全に認証するため、client secret の代わりに クライアントアサーション が使用されます。

以下の手順は、一般的な Private Key JWT Client Authentication フローを示しています。

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4JOxbdG7aweqpDHCJ8VOZq/aea18936c0cbdbfbb39d0cd79af3987e/Client_Assertion_JWT_-_Diagram.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=d8e1153c1ed7789661591011b69caf3e" alt="Private Key JWT Client Authentication フローを示す図。" width="1602" height="1284" data-path="docs/images/cdy7uua7fh8z/4JOxbdG7aweqpDHCJ8VOZq/aea18936c0cbdbfbb39d0cd79af3987e/Client_Assertion_JWT_-_Diagram.png" />
</Frame>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  このフローを完了するには、まず Auth0 Dashboard または Management API のいずれかで、`token_endpoint_auth_method=private_key_jwt` を指定した新規または既存の OIDC または Okta Workforce 接続を設定する必要があります。詳しくは、[Private Key JWT Client Authentication を設定する](#configure-private-key-jwt-client-authentication)セクションを参照してください。
</Callout>

1. 接続を設定すると、Auth0 は 2 組の公開鍵と秘密鍵のペアを自動的に生成して保存します。

   * 一方のキーペアはアクティブな `current` セットで、もう一方のセットには [キーのローテーション](#rotate-signing-keys)をサポートするために `next` というラベルが付けられます。
2. 次に、IdP に応じて以下のいずれかを行います。

   * `current` の公開鍵をダウンロードし、そのファイルを認可サーバーにアップロードする、または:
   * [`jwks_uri`](#retrieve-signing-keys) をコピーして認可サーバーに貼り付ける。
3. ユーザーが、アプリケーションへのログインなど、認証が必要な操作を実行します。
4. Auth0 は、認証を開始するためのリクエストを認可サーバーに送信します。
5. 認可サーバーは、ユーザーに認証画面と同意画面を表示します。
6. ユーザーは認可サーバーで認証を行い、同意します。
7. 認可サーバーは認可コードを Auth0 に送信します。
8. Auth0 は クライアントアサーション JWT を生成し、`current` の秘密鍵を使用して署名します。
9. Auth0 は クライアントアサーション JWT を認可サーバーに渡します。
10. 認可サーバーは、提供された `client_id` に基づいてクライアントを特定します。
11. `jwks_uri` が提供されている場合、認可サーバーは Auth0 から公開鍵を取得します。そうでない場合、サーバーはステップ 2 で登録された公開鍵を特定します。
12. `jwks_uri` がリクエストされた場合、Auth0 は公開鍵を JWKS として返します。
13. 認可サーバーは、`client_assertion` JWT のヘッダー内の `kid` で識別される `current` 公開鍵を使って署名を検証し、JWT を検証します。
14. 認可サーバーはアクセストークンを生成します。
15. 認可サーバーはアクセストークンを Auth0 に渡します。
16. Auth0 は、アクセストークンを使用してリソースサーバーにリソースをリクエストします。
17. リソースサーバーは、フローを完了するためのリソースを返します。

<div id="configure-private-key-jwt-client-authentication">
  ## Private Key JWT Client Authentication を設定する
</div>

OIDC および Okta Workforce エンタープライズ接続で Private Key JWT Client Authentication を使用するように、Auth0 Dashboard または Management API から設定できます。各方法の手順を以下に示します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  * 秘密鍵と公開署名鍵のキーペアは、接続ごとに Auth0 により自動生成されます。
  * Okta および OIDC のエンタープライズ接続では、client assertion JWT への署名に `RS256`、`RS384`、`RS512`、`PS256`、`PS384`、`ES256`、`ES384` の各アルゴリズムを使用できます。指定しない場合のデフォルトは `RS256` です。
  * 署名済み JWT は 60 秒後に自動的に期限切れになります。
</Callout>

<div id="auth0-dashboard">
  #### Auth0 Dashboard
</div>

新規および既存の OIDC 接続と Okta Workforce 接続の両方で、Auth0 Dashboard を使用して Private Key JWT Client Authentication を設定できます。

<Tabs>
  <Tab title="新しい接続">
    1. Auth0 Dashboard で、[Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise) に移動します。
    2. **OpenID Connect** または **Okta Workforce** の横にある **Create** を選択します。
    3. **General** セクションで、接続名や discovery URL など、新しい接続の詳細を入力します。
    4. Private Key JWT を有効にするには、以下の項目を設定します。

       * **Communication Channel** を **Back Channel** に設定します。
       * **Authentication Method** を **Private Key JWT** に設定します。
    5. **Create** を選択して、新しい接続を保存します。
  </Tab>

  <Tab title="既存の接続">
    1. Auth0 Dashboard で、[Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise) に移動します。
    2. **OpenID Connect** または **Okta Workforce** の横にある **Browse** を選択します。
    3. 該当する接続を選択し、**資格情報** タブを開きます。
    4. **Authentication Settings** で、以下の項目を設定します。

       * **Communication Channel** を **Back Channel** に設定します。
       * **Authentication Method** を **Private Key JWT** に設定します。
    5. **Save** を選択します。
    6. 確認用のポップアップで、**Change** を選択して変更を反映します。
  </Tab>
</Tabs>

<div id="management-api">
  #### Management API
</div>

Management API を使用すると、新規または既存の OIDC 接続に対して Private Key JWT Client Authentication を設定できます。

<Tabs>
  <Tab title="新しい接続">
    Private Key JWT Client Authentication を使用する新しい OIDC 接続を作成するには、以下の `connection.options` プロパティを適切に設定して、[Create a Connection](https://auth0.com/docs/api/management/v2/connections/post-connections) エンドポイントを呼び出します。

    | プロパティ                             | 説明                                                                                                                                                                                                                                                                 |
    | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `type`                            | このプロパティを `back_channel` に設定します。                                                                                                                                                                                                                                    |
    | `token_endpoint_auth_method`      | アイデンティティプロバイダーのトークンエンドポイントで使用する認証方法です。署名付き JWT アサーションを使用してセキュリティを強化する場合は `private_key_jwt` に、資格情報をリクエストボディで送信する場合は `client_secret_post` に設定します。デフォルトは `client_secret_post` です。`oidc` および `okta` ストラテジーにのみ適用されます。                                                   |
    | `token_endpoint_auth_signing_alg` | 任意。クライアントアサーションの署名に使用するアルゴリズムです。指定可能な値: `RS256`, `RS384`, `RS512`, `PS256`, `PS384`, `ES256`, `ES384`。未設定の場合のデフォルトは `RS256` です。`oidc` および `okta` ストラテジーにのみ適用されます。                                                                                                  |
    | `id_token_signed_response_algs`   | 任意。アイデンティティプロバイダーが発行した ID トークンの検証を許可するアルゴリズムの一覧です。設定すると、Auth0 はこの一覧に含まれないアルゴリズムで署名された ID トークンを拒否します。指定可能な値: `RS256`, `RS384`, `RS512`, `PS256`, `PS384`, `ES256`, `ES384`。未設定の場合、Auth0 はサポートされている任意のアルゴリズムで署名された ID トークンを受け入れます。`oidc` および `okta` ストラテジーにのみ適用されます。 |
    | `token_endpoint_jwtca_aud_format` | 任意。トークンエンドポイントでのクライアント認証に使用する JWT の `aud` (audience) クレームの形式を指定します。OIDC の発行者 URL を使用する場合は `issuer` に、トークンエンドポイント URL を使用する場合は `token_endpoint` に設定します。デフォルトは `token_endpoint` です。                                                                                  |

    **POST 呼び出しの例**

    ```js lines theme={null}
    POST /api2/connections

    {
      strategy: 'oidc',
      options: {
        type: "back_channel",
        token_endpoint_auth_method: "private_key_jwt",
        token_endpoint_auth_signing_alg: "RS256",
        id_token_signed_response_algs: ["RS256", "RS384"]
      },
      …
    }
    ```
  </Tab>

  <Tab title="既存の接続">
    既存の OIDC 接続を変更して Private Key JWT Client Authentication を使用するには、以下の `connection.options` プロパティを適切に設定して、[Update a Connection](https://auth0.com/docs/api/management/v2/connections/patch-connections-by-id) エンドポイントを呼び出します。

    | プロパティ                             | 説明                                                                                                                                                                                                                                                                 |
    | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `type`                            | このプロパティを `back_channel` に設定します。                                                                                                                                                                                                                                    |
    | `token_endpoint_auth_method`      | アイデンティティプロバイダーのトークンエンドポイントで使用する認証方法です。署名付き JWT アサーションを使用してセキュリティを強化する場合は `private_key_jwt` に、資格情報をリクエストボディで送信する場合は `client_secret_post` に設定します。デフォルトは `client_secret_post` です。`oidc` および `okta` ストラテジーにのみ適用されます。                                                   |
    | `token_endpoint_auth_signing_alg` | 任意。クライアントアサーションの署名に使用するアルゴリズムです。指定可能な値: `RS256`, `RS384`, `RS512`, `PS256`, `PS384`, `ES256`, `ES384`。未設定の場合のデフォルトは `RS256` です。`oidc` および `okta` ストラテジーにのみ適用されます。                                                                                                  |
    | `id_token_signed_response_algs`   | 任意。アイデンティティプロバイダーが発行した ID トークンの検証を許可するアルゴリズムの一覧です。設定すると、Auth0 はこの一覧に含まれないアルゴリズムで署名された ID トークンを拒否します。指定可能な値: `RS256`, `RS384`, `RS512`, `PS256`, `PS384`, `ES256`, `ES384`。未設定の場合、Auth0 はサポートされている任意のアルゴリズムで署名された ID トークンを受け入れます。`oidc` および `okta` ストラテジーにのみ適用されます。 |
    | `token_endpoint_jwtca_aud_format` | 任意。トークンエンドポイントでのクライアント認証に使用する JWT の `aud` (audience) クレームの形式を指定します。OIDC の発行者 URL を使用する場合は `issuer` に、トークンエンドポイント URL を使用する場合は `token_endpoint` に設定します。デフォルトは `token_endpoint` です。                                                                                  |

    **PATCH 呼び出しの例**

    ```js lines theme={null}
    PATCH /api2/connections/{id}

    {
      strategy: 'oidc',
      options: {
        type: "back_channel",
        token_endpoint_auth_method: "private_key_jwt",
        token_endpoint_auth_signing_alg: "RS256",
        id_token_signed_response_algs: ["RS256", "RS384"]
      },
      …
    }
    ```
  </Tab>
</Tabs>

<div id="retrieve-signing-keys">
  ## 署名鍵を取得する
</div>

接続が Private Key JWT Client Authentication を使用するように設定されると、Auth0 Dashboard、Management API、または公開 JWKS URI を通じて公開鍵を取得できます。

<AccordionGroup>
  <Accordion title="Auth0 Dashboard">
    Auth0 Dashboard から署名鍵を取得するには、次の手順に従います。

    1. [Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise) に移動します。
    2. **OpenID Connect** または **Okta Workforce** の横にある **Browse** を選択します。
    3. 該当する接続を選択し、**資格情報** タブを開きます。
    4. **資格情報** セクションで、該当する署名鍵の横にある **Download** アイコンを選択します。
  </Accordion>

  <Accordion title="Management API">
    Management API で公開鍵を表示するには、接続の ID を使用して [Get connection keys](https://auth0.com/docs/api/management/v2/connections/get-keys) エンドポイントを呼び出します。

    <Warning>
      このエンドポイントを使用するには、`read:connections_keys` スコープが必要です。
    </Warning>

    **GET 呼び出しの例**

    ```js lines theme={null}
    GET /api2/connections/{id}/keys
    ```

    **レスポンス例**

    ```js lines expandable theme={null}
    {
        cert: "-----BEGIN CERTIFICATE-----
    MIIDDTCCAfWgAwIBAgIJP...Ek=
    -----END CERTIFICATE-----",
        pkcs7: "-----BEGIN PKCS7-----
    MIIDPAYJKoZIhvcNAQcCo...AA==
    -----END PKCS7-----
    ",
        kid: "E4CXqUP6r92yo0f_sdkdC",
        next: true,
        fingerprint: "7F:33:86:D9:4A:98:B2:DC:B0:41:74:54:DA:31:E7:74:42:32:96:8C",
        thumbprint: "7F3386D94A98B2DCB0417454DA31E7744232968C"
      }, 
      {
        cert: "-----BEGIN CERTIFICATE-----
    MIIDDTCCAfWgAwIBAgI...Ss=
    -----END CERTIFICATE-----",
        pkcs7: "-----BEGIN PKCS7-----
    MIIDPAYJKoZIhvcNAQ...AA==
    -----END PKCS7-----
    ",
        kid: "_4WuXpXlwwmSE65saKWDM",
        current: true,
        current_since: "2025-01-24T08:50:06.662Z",
        fingerprint: "33:7D:6F:35:46:31:AD:6E:69:43:01:A2:77:DF:8E:73:64:F6:E8:5B",
        thumbprint: "337D6F354631AD6E694301A277DF8E7364F6E85B"
      }, 
      {
        cert: "-----BEGIN CERTIFICATE-----
    MIIDDTCCAfWgAwIBA...6Q=
    -----END CERTIFICATE-----",
        pkcs7: "-----BEGIN PKCS7-----
    MIIDPAYJKoZIhvcN...AA==
    -----END PKCS7-----
    ",
        kid: "roUD9STeDy9qBTx5XjaTz",
        previous: true,
        current_since: "2025-01-24T08:48:51.523Z",
        current_until: "2025-01-24T08:50:06.663Z",
        fingerprint: "44:D3:DD:3B:63:99:59:9A:39:D9:F4:F0:4F:1B:AC:BB:18:72:40:5C",
        thumbprint: "44D3DD3B6399599A39D9F4F04F1BACBB1872405C"
      }
    ```
  </Accordion>

  <Accordion title="Public JWKS URI">
    一部のアイデンティティプロバイダーでは、private\_key\_jwt 用の公開鍵を公開 JWKS (JSON Web Key Set) URI の形式で提供できます。

    接続用の公開鍵が生成されている場合は、次の URI を IdP の設定に追加することで取得できます。

    ```http wrap lines theme={null}
    https://{auth0 domain}/oauth/connection/{connection name}/.well-known/jwks.json
    ```

    <Warning>
      JWKS URI はグローバル rate limits の対象になります。これらの制限に達しないよう、公開鍵をキャッシュできます。ベストプラクティスとして、Auth0 はログインのたびに JWKS URI エンドポイントを呼び出さないよう、少なくとも 5〜10 分のキャッシュ間隔を推奨しています。
    </Warning>
  </Accordion>
</AccordionGroup>

<div id="rotate-signing-keys">
  ## 署名鍵をローテーションする
</div>

Private Key JWT Client Authentication は、固定的で長期間有効な共有クライアントシークレットに比べてセキュリティを高められるよう、署名鍵のローテーションをサポートしています。署名鍵をローテーションすると、1 つのキーが露出する期間を限定できるため、攻撃者に侵害されるリスクのある時間を短縮できます。また、セキュリティインシデント発生時にも迅速に対応できるようになります。

サービスへの影響を避けるため、Auth0 では署名鍵を 1 年ごとにローテーションすることを推奨しています。署名鍵のローテーションには、Auth0 Dashboard または Management API を使用できます。

<AccordionGroup>
  <Accordion title="Auth0 Dashboard">
    Auth0 Dashboard で署名鍵をローテーションするには、次の手順に従います。

    1. [Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise) に移動します。
    2. **OpenID Connect** または **Okta Workforce** の横にある **Browse** を選択します。
    3. 適切な接続を選択し、**資格情報** タブを開きます。
    4. **資格情報** セクションで **Rotate Keys** を選択します。
    5. ポップアップで **Save** を選択し、ローテーションを確定します。

    ローテーション後は、以前のキーで署名された使用中の JWT は直ちに無効になり、IdP での検証に失敗する可能性があります。
  </Accordion>

  <Accordion title="Management API">
    Management API で公開鍵を確認するには、接続 ID を使用して Rotate Connection Signing Keys エンドポイントを呼び出します。

    <Warning>
      このエンドポイントを使用するには、`create:connections_keys` と `update:connections_keys` の両方のスコープが必要です。
    </Warning>

    ```js lines theme={null}
    POST /v2/connections/{id}/keys/rotate
    ```

    ローテーション後は、以前のキーで署名された使用中の JWT は直ちに無効になり、IdP での検証に失敗する可能性があります。
  </Accordion>
</AccordionGroup>

<Card title="キーのローテーションを理解する">
  OIDC または Okta Workforce の接続では、署名鍵に次のいずれかのステータスが割り当てられます。

  * **Current**: 現在アプリケーションで使用されている署名鍵。
  * **Next**: 現在のキーが取り消された後に、アプリケーションで次に使用される署名鍵。
  * **Previous**: 期限切れ、またはその他の理由で取り消され、すでに使用されていない署名鍵。

  接続で Private Key JWT Client Authentication を初めて有効にしたときは、`current` と `next` のキーペアのみが生成されます。キーが `previous` としてマークされるのは、ローテーション後です。

  署名鍵をローテーションすると、次の変更が発生します。

  1. `current` キーは削除されて取り消され、このキーで署名された JWT は、IdP が `jwks_uri` を使用するよう構成されている場合、IdP での検証に失敗します。
  2. `current` キーに `previous` ステータスが割り当てられます。
  3. `next` キーがアクティブなキーとなり、`current` ステータスが付与されます。以後、client assertion JWT はこのキーで署名されます。
  4. ローテーションされたキーを置き換えるため、新しい署名鍵が自動的に生成されます。この新しい署名鍵には `next` ステータスが付与されます。
</Card>

<div id="learn-more">
  ## 詳細はこちら
</div>

* [Auth0アプリケーションを Okta Workforce Enterprise 接続に接続する](/docs/ja-jp/authenticate/identity-providers/enterprise-identity-providers/okta)
* [OpenID Connect の IDプロバイダーに接続する](/docs/ja-jp/authenticate/identity-providers/enterprise-identity-providers/oidc)
