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