Skip to main content
JSON Web Key Set (JWKS) は、 を検証するための公開キーを含むキーセットです。これらの JWT は によって発行され、RS256 signing algorithm を使用して署名されます。 Auth0 でアプリケーションと API を作成する際、 の署名でサポートされている algorithms は RS256HS256 の 2 つです。RS256 は非対称署名を生成するため、JWT の署名には秘密キーを使用し、署名の検証には別の公開キーを使用する必要があります。 Auth0 では、RS256 トークンの署名に使用される暗号キーを表すために、JSON Web Key (JWK) specification を使用しています。この仕様では、2 つの高水準データ構造、JSON Web Key (JWK)JSON Web Key Set (JWKS) を定義しています。以下は、この仕様における定義です。 Auth0 はテナントごとに JWKS エンドポイントを公開しており、その場所は https://{yourDomain}/.well-known/jwks.json です。このエンドポイントには、このテナント向けに Auth0 が発行するすべての JWT を検証するための JWK が含まれます。
現在、Auth0 が一度に署名に使用する JWK は 1 つだけです。ただし、このエンドポイントには複数の JWK が含まれる可能性があることを前提にしておくことが重要です。たとえば、アプリケーションの署名鍵をローテーションする と、JWKS に複数のキーが含まれることがあります。

JSON Web Key Set をキャッシュする

アプリケーションが JWKS エンドポイントから取得した JWKS をキャッシュすることをお勧めします。これにより、次の利点があります。
  • 繰り返しリクエストによるテナントのレート制限の消費を防げます。
  • トークンをバリデーションするたびに JWKS エンドポイントへネットワークリクエストを送信する必要がなくなり、パフォーマンスが向上します。
  • JWKS エンドポイントが一時的に利用できない場合でも、アプリケーションでトークンのバリデーションを継続できるため、耐障害性が向上します。
JWKS ライブラリまたはフレームワークのミドルウェアを使用すると、未知の kid に対する再取得や再取得のレート制限を含むキャッシュ処理を行えます。たとえば、当社のQuickstartsでは、これらを処理するライブラリを使用しています。 開発やメンテナンスの負担を避けるため、キャッシュを自分で実装することはお勧めしません。ただし、ユースケース上必要な場合は、以下のガイダンスに従ってください。
  • リクエストごとに JWKS を取得しないよう、JWKS を 5~10 分間キャッシュします。キャッシュ間隔を長くすると、リクエスト数とレイテンシーをさらに削減できます。
  • 署名鍵をローテーションすると、Auth0 は新しいキーで新しいトークンに署名します。キー ID (kid) がキャッシュ済みの JWKS に含まれていないトークンを受信した場合は、キャッシュを無効化し、新しいキーを取得するために JWKS を再取得します。キャッシュの有効期間が切れるのを待つのではなく、未知の kid を検出したときに更新することで、アプリケーションはローテーションされたキーを速やかに取得できます。これにより、キャッシュ間隔が長くてもローテーションが遅延することはありません。
  • キャッシュミス時の再取得頻度を制限します (たとえば、再試行は 1 回のみにします) 。これにより、未知のキーで署名されたトークンが大量に送られても、JWKS エンドポイントへのリクエストが急増してレート制限を消費するのを防げます。手動で取り消されたキーで署名されたトークンの受け入れを停止する必要があるまでの時間に応じて、キャッシュ間隔を設定してください。

詳細情報