- クライアントシークレット はリクエストごとに当事者間で送信する必要があるため、傍受や再利用のリスクが高まる。
- 有効期限の適用や、悪意のある第三者による再利用の防止に使える仕組みが限られている。
- 両当事者が クライアントシークレット を保持するため、漏えいや露出のリスクが高まる。
仕組み
/oauth/token や /oauth/par などの認証エンドポイントを使用して、 または OpenID プロバイダーに対してクライアントの身元を検証します。Private Key JWT クライアント認証 では、クライアントシークレットの代わりに、署名付きのクライアントアサーション JWT を OpenID プロバイダーに渡します。
クライアントアサーション JWT には、次のクレームが含まれます。
- OpenID プロバイダーの を識別する
aud() 。 - 1 回限りの使用またはリプレイ攻撃の防止を可能にする
jti(JWT ID) 。 - トークンの有効期間を制限する
exp(有効期限) 。 - を示す
subとiss。
Private Key JWT クライアント認証フロー

このフローを完了するには、まず Auth0 Dashboard または Management API を使用して、
token_endpoint_auth_method=private_key_jwt を指定した新規または既存の OIDC または Okta Workforce 接続を設定する必要があります。詳細については、Configure 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 クライアント認証を設定する
- 秘密鍵と公開鍵の署名鍵ペアは、接続ごとに Auth0 によって自動的に生成されます。
- クライアントアサーション JWT への署名には、Okta および OIDC エンタープライズ接続で次のアルゴリズムを使用できます:
RS256,RS384,RS512,PS256,PS384,ES256,ES384。指定しない場合のデフォルトはRS256です。 - 署名済み JWT は 60 秒後に自動的に期限切れになります。
Auth0 Dashboard
- 新しい接続
- 既存の接続
- Auth0 Dashboard で、Authentication > Enterprise に移動します。
- OpenID Connect または Okta Workforce の横にある Create を選択します。
- General セクションで、接続の名前やディスカバリー URL など、新しい接続の詳細を入力します。
-
Private Key JWT を有効にするには、次の項目を設定します。
- Communication Channel を Back Channel に設定します。
- Authentication Method を Private Key JWT に設定します。
- Create を選択して、新しい接続を保存します。
Management API
- 新規接続
- 既存の接続
Private Key JWT クライアント認証 を使用する新しい OIDC 接続を作成するには、以下の
POST 呼び出しの例
connection.options プロパティを適切に設定して、Create a Connection エンドポイントを呼び出します。| プロパティ | 説明 |
|---|---|
type | このプロパティを back_channel に設定します。 |
token_endpoint_auth_method | IDプロバイダーのトークンエンドポイントで使用する認証方式です。署名付き 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プロバイダーが発行した IDトークン の検証に使用できるアルゴリズムの一覧です。設定すると、Auth0 はこの一覧に含まれないアルゴリズムで署名された IDトークン を拒否します。使用可能な値: RS256、RS384、RS512、PS256、PS384、ES256、ES384。未設定の場合、Auth0 はサポートされている任意のアルゴリズムで署名された IDトークン を受け入れます。oidc および okta ストラテジーにのみ適用されます。 |
token_endpoint_jwtca_aud_format | 任意。トークンエンドポイントでのクライアント認証に使用する JWT の aud (対象者) クレームの形式を指定します。OIDC の issuer URL を使用する場合は issuer に、トークンエンドポイント URL を使用する場合は token_endpoint に設定します。デフォルトは token_endpoint です。 |
署名鍵の取得
Auth0 Dashboard
Auth0 Dashboard
Auth0 Dashboard から署名鍵を取得するには、次の手順を実行します。
- Authentication > Enterprise に移動します。
- OpenID Connect または Okta Workforce の横にある Browse を選択します。
- 対象の接続を選択し、Credentials タブを開きます。
- Credentials セクションで、該当する署名キーの横にある Download アイコンを選択します。
Management API
Management API
Public JWKS URI
Public JWKS URI
一部の IDプロバイダー では、private_key_jwt 用の公開鍵を公開 JWKS (JSON Web Key Set) URI の形式で提供できます。接続の公開鍵が生成されている場合は、次の URI を IdP の設定に追加することで取得できます。
署名鍵をローテーションする
Auth0 Dashboard
Auth0 Dashboard
Auth0 Dashboard で署名鍵をローテーションするには、次の手順に従います。
- Authentication > Enterprise に移動します。
- OpenID Connect または Okta Workforce の横にある Browse を選択します。
- 対象の接続を選択し、Credentials タブを開きます。
- Credentials セクションで、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ステータスが付与されます。以後、クライアントアサーション JWT はこの鍵で署名されます。- ローテーションされた鍵を置き換えるために、新しい署名鍵が自動的に生成されます。新しい署名鍵には
nextステータスが付与されます。