- client secret はリクエストごとに当事者間で送信する必要があるため、傍受や再利用のリスクが高まります。
- 有効期限の適用や、悪意のある第三者による再利用を防ぐための仕組みが限られています。
- 双方が client secret を保持するため、漏えいや露出のリスクが高まります。
仕組み
OIDC 接続フローでは、/oauth/token や /oauth/par などの認証済みエンドポイントを使用して、クライアントの身元を または OpenID プロバイダーに対して検証します。Private Key JWT Client Authentication では、client secret の代わりに、署名付きのクライアントアサーション JWT が OpenID プロバイダーに渡されます。
クライアントアサーション JWT には、次のクレームが含まれます。
- OpenID プロバイダーの を識別する
aud() 。 - 1 回限りの使用やリプレイ攻撃対策を可能にする
jti(JWT ID) 。 - トークンの有効期間を制限する
exp(有効期限) 。 - を識別する
subとiss。
Private Key JWT Client Authentication フロー
ユーザーが上流の (IdP) での認証を完了すると、認可コードとともに Auth0 にリダイレクトされます。この認可コードは、OpenID プロバイダーのトークンエンドポイントでトークンと交換されます。接続で Private Key JWT が有効になっている場合、OpenID プロバイダーのトークンエンドポイントへの呼び出しでは、より安全に認証するため、client secret の代わりに クライアントアサーション が使用されます。 以下の手順は、一般的な Private Key JWT Client Authentication フローを示しています。
このフローを完了するには、まず Auth0 Dashboard または Management API のいずれかで、
token_endpoint_auth_method=private_key_jwt を指定した新規または既存の OIDC または Okta Workforce 接続を設定する必要があります。詳しくは、Private Key JWT Client Authentication を設定するセクションを参照してください。-
接続を設定すると、Auth0 は 2 組の公開鍵と秘密鍵のペアを自動的に生成して保存します。
- 一方のキーペアはアクティブな
currentセットで、もう一方のセットには キーのローテーションをサポートするためにnextというラベルが付けられます。
- 一方のキーペアはアクティブな
-
次に、IdP に応じて以下のいずれかを行います。
currentの公開鍵をダウンロードし、そのファイルを認可サーバーにアップロードする、または:jwks_uriをコピーして認可サーバーに貼り付ける。
- ユーザーが、アプリケーションへのログインなど、認証が必要な操作を実行します。
- Auth0 は、認証を開始するためのリクエストを認可サーバーに送信します。
- 認可サーバーは、ユーザーに認証画面と同意画面を表示します。
- ユーザーは認可サーバーで認証を行い、同意します。
- 認可サーバーは認可コードを Auth0 に送信します。
-
Auth0 は クライアントアサーション JWT を生成し、
currentの秘密鍵を使用して署名します。 - Auth0 は クライアントアサーション JWT を認可サーバーに渡します。
-
認可サーバーは、提供された
client_idに基づいてクライアントを特定します。 -
jwks_uriが提供されている場合、認可サーバーは Auth0 から公開鍵を取得します。そうでない場合、サーバーはステップ 2 で登録された公開鍵を特定します。 -
jwks_uriがリクエストされた場合、Auth0 は公開鍵を JWKS として返します。 -
認可サーバーは、
client_assertionJWT のヘッダー内のkidで識別されるcurrent公開鍵を使って署名を検証し、JWT を検証します。 - 認可サーバーはアクセストークンを生成します。
- 認可サーバーはアクセストークンを Auth0 に渡します。
- Auth0 は、アクセストークンを使用してリソースサーバーにリソースをリクエストします。
- リソースサーバーは、フローを完了するためのリソースを返します。
Private Key JWT Client Authentication を設定する
OIDC および Okta Workforce エンタープライズ接続で Private Key JWT Client Authentication を使用するように、Auth0 Dashboard または Management API から設定できます。各方法の手順を以下に示します。- 秘密鍵と公開署名鍵のキーペアは、接続ごとに Auth0 により自動生成されます。
- Okta および OIDC のエンタープライズ接続では、client assertion JWT への署名に
RS256、RS384、RS512、PS256、PS384、ES256、ES384の各アルゴリズムを使用できます。指定しない場合のデフォルトはRS256です。 - 署名済み JWT は 60 秒後に自動的に期限切れになります。
Auth0 Dashboard
新規および既存の OIDC 接続と Okta Workforce 接続の両方で、Auth0 Dashboard を使用して Private Key JWT Client Authentication を設定できます。- 新しい接続
- 既存の接続
- Auth0 Dashboard で、Authentication > Enterprise に移動します。
- OpenID Connect または Okta Workforce の横にある Create を選択します。
- General セクションで、接続名や discovery URL など、新しい接続の詳細を入力します。
-
Private Key JWT を有効にするには、以下の項目を設定します。
- Communication Channel を Back Channel に設定します。
- Authentication Method を Private Key JWT に設定します。
- Create を選択して、新しい接続を保存します。
Management API
Management API を使用すると、新規または既存の OIDC 接続に対して Private Key JWT Client Authentication を設定できます。- 新しい接続
- 既存の接続
Private Key JWT Client Authentication を使用する新しい OIDC 接続を作成するには、以下の
connection.options プロパティを適切に設定して、Create a Connection エンドポイントを呼び出します。POST 呼び出しの例
署名鍵を取得する
接続が Private Key JWT Client Authentication を使用するように設定されると、Auth0 Dashboard、Management API、または公開 JWKS URI を通じて公開鍵を取得できます。Auth0 Dashboard
Auth0 Dashboard
Auth0 Dashboard から署名鍵を取得するには、次の手順に従います。
- Authentication > Enterprise に移動します。
- OpenID Connect または Okta Workforce の横にある Browse を選択します。
- 該当する接続を選択し、資格情報 タブを開きます。
- 資格情報 セクションで、該当する署名鍵の横にある Download アイコンを選択します。
Management API
Management API
Public JWKS URI
Public JWKS URI
一部のアイデンティティプロバイダーでは、private_key_jwt 用の公開鍵を公開 JWKS (JSON Web Key Set) URI の形式で提供できます。接続用の公開鍵が生成されている場合は、次の URI を IdP の設定に追加することで取得できます。
署名鍵をローテーションする
Private Key JWT Client Authentication は、固定的で長期間有効な共有クライアントシークレットに比べてセキュリティを高められるよう、署名鍵のローテーションをサポートしています。署名鍵をローテーションすると、1 つのキーが露出する期間を限定できるため、攻撃者に侵害されるリスクのある時間を短縮できます。また、セキュリティインシデント発生時にも迅速に対応できるようになります。 サービスへの影響を避けるため、Auth0 では署名鍵を 1 年ごとにローテーションすることを推奨しています。署名鍵のローテーションには、Auth0 Dashboard または Management API を使用できます。Auth0 Dashboard
Auth0 Dashboard
Auth0 Dashboard で署名鍵をローテーションするには、次の手順に従います。
- Authentication > Enterprise に移動します。
- OpenID Connect または Okta Workforce の横にある Browse を選択します。
- 適切な接続を選択し、資格情報 タブを開きます。
- 資格情報 セクションで Rotate Keys を選択します。
- ポップアップで Save を選択し、ローテーションを確定します。
Management API
Management API
Management API で公開鍵を確認するには、接続 ID を使用して Rotate Connection Signing Keys エンドポイントを呼び出します。ローテーション後は、以前のキーで署名された使用中の JWT は直ちに無効になり、IdP での検証に失敗する可能性があります。
キーのローテーションを理解する
OIDC または Okta Workforce の接続では、署名鍵に次のいずれかのステータスが割り当てられます。
- Current: 現在アプリケーションで使用されている署名鍵。
- Next: 現在のキーが取り消された後に、アプリケーションで次に使用される署名鍵。
- Previous: 期限切れ、またはその他の理由で取り消され、すでに使用されていない署名鍵。
current と next のキーペアのみが生成されます。キーが previous としてマークされるのは、ローテーション後です。署名鍵をローテーションすると、次の変更が発生します。currentキーは削除されて取り消され、このキーで署名された JWT は、IdP がjwks_uriを使用するよう構成されている場合、IdP での検証に失敗します。currentキーにpreviousステータスが割り当てられます。nextキーがアクティブなキーとなり、currentステータスが付与されます。以後、client assertion JWT はこのキーで署名されます。- ローテーションされたキーを置き換えるため、新しい署名鍵が自動的に生成されます。この新しい署名鍵には
nextステータスが付与されます。