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

> JSON Web Key Set は、JSON Web Key のセット（暗号キーを表す JSON オブジェクト）を表す JSON オブジェクトです。

# JSON Web Key Sets

JSON Web Key Set (JWKS) は、<Tooltip tip="JSON Web Token (JWT): 2者間でクレームを安全にやり取りするために使用される標準的な ID トークン形式（多くの場合、アクセストークン形式としても使用）。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=JSON+Web+Token+%28JWT%29">JSON Web Token (JWT)</Tooltip> を検証するための公開キーを含むキーセットです。これらの JWT は <Tooltip tip="Authorization Server: ユーザーを認証し、アプリケーションに認可データやトークンを発行するサーバーコンポーネント。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Authorization+Server">Authorization Server</Tooltip> によって発行され、RS256 [signing algorithm](/docs/ja-jp/get-started/applications/signing-algorithms) を使用して署名されます。

Auth0 でアプリケーションと API を作成する際、<Tooltip tip="JSON Web Token (JWT): 2者間でクレームを安全にやり取りするために使用される標準的な ID トークン形式（多くの場合、アクセストークン形式としても使用）。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=JWTs">JWTs</Tooltip> の署名でサポートされている algorithms は **RS256** と **HS256** の 2 つです。RS256 は非対称署名を生成するため、JWT の署名には秘密キーを使用し、署名の検証には別の公開キーを使用する必要があります。

Auth0 では、RS256 トークンの署名に使用される暗号キーを表すために、[JSON Web Key (JWK) specification](https://tools.ietf.org/html/rfc7517) を使用しています。この仕様では、2 つの高水準データ構造、**JSON Web Key (JWK)** と **JSON Web Key Set (JWKS)** を定義しています。以下は、この仕様における定義です。

| 項目                          | 説明                                                                    |
| --------------------------- | --------------------------------------------------------------------- |
| **JSON Web Key (JWK)**      | 暗号キーを表す JSON オブジェクト。オブジェクトのメンバーは、その値を含むキーのプロパティを表します。                 |
| **JSON Web Key Set (JWKS)** | JWK のセットを表す JSON オブジェクト。この JSON オブジェクトには、JWK の配列である `keys` メンバーが必須です。 |

Auth0 はテナントごとに JWKS エンドポイントを公開しており、その場所は `https://{yourDomain}/.well-known/jwks.json` です。このエンドポイントには、このテナント向けに Auth0 が発行するすべての JWT を検証するための JWK が含まれます。

<Warning>
  現在、Auth0 が一度に署名に使用する JWK は 1 つだけです。ただし、このエンドポイントには複数の JWK が含まれる可能性があることを前提にしておくことが重要です。たとえば、[アプリケーションの署名鍵をローテーションする](/docs/ja-jp/get-started/tenant-settings/signing-keys/rotate-signing-keys) と、JWKS に複数のキーが含まれることがあります。
</Warning>

<div id="cache-the-json-web-key-set">
  ## JSON Web Key Set をキャッシュする
</div>

アプリケーションが JWKS エンドポイントから取得した JWKS をキャッシュすることをお勧めします。これにより、次の利点があります。

* 繰り返しリクエストによるテナントの[レート制限](/docs/ja-jp/troubleshoot/customer-support/operational-policies/rate-limit-policy)の消費を防げます。
* トークンをバリデーションするたびに JWKS エンドポイントへネットワークリクエストを送信する必要がなくなり、パフォーマンスが向上します。
* JWKS エンドポイントが一時的に利用できない場合でも、アプリケーションでトークンのバリデーションを継続できるため、耐障害性が向上します。

JWKS ライブラリまたはフレームワークのミドルウェアを使用すると、未知の `kid` に対する再取得や再取得のレート制限を含むキャッシュ処理を行えます。たとえば、当社の[Quickstarts](/docs/ja-jp/quickstarts)では、これらを処理するライブラリを使用しています。

開発やメンテナンスの負担を避けるため、キャッシュを自分で実装することはお勧めしません。ただし、ユースケース上必要な場合は、以下のガイダンスに従ってください。

* リクエストごとに JWKS を取得しないよう、JWKS を 5～10 分間キャッシュします。キャッシュ間隔を長くすると、リクエスト数とレイテンシーをさらに削減できます。
* [署名鍵をローテーションする](/docs/ja-jp/get-started/tenant-settings/signing-keys/rotate-signing-keys)と、Auth0 は新しいキーで新しいトークンに署名します。キー ID (`kid`) がキャッシュ済みの JWKS に含まれていないトークンを受信した場合は、キャッシュを無効化し、新しいキーを取得するために JWKS を再取得します。キャッシュの有効期間が切れるのを待つのではなく、未知の `kid` を検出したときに更新することで、アプリケーションはローテーションされたキーを速やかに取得できます。これにより、キャッシュ間隔が長くてもローテーションが遅延することはありません。
* キャッシュミス時の再取得頻度を制限します (たとえば、再試行は 1 回のみにします) 。これにより、未知のキーで署名されたトークンが大量に送られても、JWKS エンドポイントへのリクエストが急増してレート制限を消費するのを防げます。手動で[取り消されたキー](/docs/ja-jp/get-started/tenant-settings/signing-keys/revoke-signing-keys)で署名されたトークンの受け入れを停止する必要があるまでの時間に応じて、キャッシュ間隔を設定してください。

<div id="learn-more">
  ## 詳細情報
</div>

* [署名鍵](/docs/ja-jp/get-started/tenant-settings/signing-keys)
* [JSON Web Key Set のプロパティ](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-key-set-properties)
* [JSON Web Key Sets の場所を確認する](/docs/ja-jp/secure/tokens/json-web-tokens/locate-json-web-key-sets)
* [署名証明書を表示する](/docs/ja-jp/get-started/tenant-settings/signing-keys/view-signing-certificates)
