開始する前に
Auth0 で DPoP を有効にする前に、以下を確認してください。
- アップストリームのIDプロバイダーは、仕様 RFC-9449 に従って DPoP をサポートしている必要があります。
- 既存の OIDC または Okta Enterprise 接続があるか、新たに作成できる必要があります。Auth0 で Enterprise 接続を作成する方法については、Enterprise Connectionsを参照してください。
- 接続で Token Vault が使用されるように構成されていてはなりません。
- 接続では、Proof Key for Code Exchange (PKCE) Authorization Code Flow + PKCE を使用する必要があります。IDプロバイダーが PKCE をサポートしている場合、これはアップストリームで有効になります。
- 接続の type は
back_channelである必要があります。
上流IdPのサポートを確認する
dpop_signing_alg_values_supported を探します。
例
署名アルゴリズムを選択する
| Algorithm | Description | When to use |
|---|---|---|
| ES256 | P-256 曲線と SHA-256 を使用する ECDSA | IDプロバイダーが ES256 をサポートしている場合。 |
| ES384 | P-384 曲線と SHA-384 を使用する ECDSA | IDプロバイダーで ES384 が必要な場合。 |
| ES512 | P-521 曲線と SHA-512 を使用する ECDSA | IDプロバイダーで ES512 が必要な場合。 |
| Ed25519 | Curve25519 を使用する EdDSA | コンプライアンス要件により、IDプロバイダーで Ed25519 が必要な場合。 |
DPoP を有効にする
- Auth0 Dashboard
- Management API
Auth0 Dashboard では、次の手順を実行します。
- Authentication > Enterprise に移動し、設定する接続を選択します。
- Credentials タブを選択します。
- Enable Demonstrating Proof of Possession (DPoP) のチェックボックスをオンにします。
- DPoP の Signing Algorithms のメニューで、使用するアルゴリズムを選択します。

- Save を選択します。
DPoP をテストする
- アプリケーションに移動します。
- 設定済みの Enterprise 接続を使用してログインフローを開始します。
- 上流のIDプロバイダーでログインを完了します。
- Auth0 Dashboard > Monitoring > Logs に移動し、Auth0 ログ で確認します。
dpop_signing_alg と idp_token_type: "dpop" の値は、Auth0 が設定されたアルゴリズムを使用して DPoP プルーフを送信し、IdP が DPoP にバインドされたトークンを発行したことを示します。upstream_userinfo_fetch オブジェクトは、User Information エンドポイントが呼び出された場合にのみ存在します。dpop_bound フィールドは、/userinfo エンドポイントへの GET リクエストが正常に DPoP バインドされた場合にのみ存在します。
DPoP を無効にする
- Auth0 Dashboard
- Management API
- Authentication > Enterprise に移動し、設定する接続を選択します。
- Credentials タブを選択します。
- Enable Demonstrating Proof of Possession (DPoP) チェックボックスをオフにします。
- Save を選択します。
トラブルシューティング
Auth0 の設定を確認する
- Auth0 Dashboard > Authentication > Enterprise に移動します。
- Okta または OIDC の接続を選択します。
- Advanced Settings > Grant Types に移動し、その接続で Token Vault が有効になっていないことを確認します。Token Vault が選択されていないことを確認してください。
- Management API の Update a connection エンドポイントを使用して、
dpop_signing_alg設定を確認します。
dpop_signing_alg のレスポンスで、次の点を確認してください。
- アルゴリズムがサポート対象の値 (ES256、ES384、ES512、Ed25519) のいずれかであることを確認します。
- 接続で、Authorization Code Flow + PKCE を使用するバックチャネルのトークン交換が有効になっていることを確認します。DPoP は、Implicit Flow のようなフロントチャネル通信ではサポートされておらず、接続でフロントチャネルを使用している場合は暗黙的に無効になります。
テナントログに DPoP フィールドがない
s) または失敗 (f) ログに dpop_signing_alg または idp_token_type フィールドが含まれていない場合は、次のいずれかが原因である可能性があります。
- DPoP が設定されていません。前述のとおり、Management API の Update a connection エンドポイントを使用して、接続の
optionsオブジェクトでdpop_signing_algが設定されていることを確認してください。 - サポート対象外のアルゴリズム。Auth0 でサポートされているのは ES256、ES384、ES512、Ed25519 です。
dpop_signing_algにサポート対象外の値 (たとえば RS256) が設定されている場合、DPoP は暗黙的に無効になります。エラーはログに記録されません。接続を更新し、ES256、ES384、ES512、または Ed25519 を使用してください。 - フロントチャネル接続。DPoP では、接続タイプとして
back_channelトークン交換が必要です。grant type を更新 して、Authorization Code Flow や Authorization Code Flow + PKCE などのバックチャネルフローに変更する必要がある場合があります。
DPoP を有効にした後、認証が失敗する
dpop_signing_alg を含む失敗 (f) イベントが次のように表示されます。
idp_token_type は含まれません。
IDプロバイダーが DPoP プルーフを拒否する
invalid_dpop_proof エラーを返すことがあり、その結果、認証に失敗します。
IdP が DPoP をサポートしていること、および設定したアルゴリズム (ES256、ES384、ES512、または Ed25519) がサポート対象の一覧に含まれていることを確認してください。これは、IdP の OpenID Connect ディスカバリードキュメントにアクセスして確認できます。
dpop_signing_alg_values_supported を確認してください。このフィールドが存在しない場合、IdP は DPoP をサポートしていない可能性があります。このフィールドに Auth0 がサポートしていないアルゴリズムしか含まれていない場合 (たとえば RS256 のみ) 、この接続では DPoP を使用できません。この接続では DPoP を無効にするか、ES256、ES384、ES512、または Ed25519 をサポートするよう IdP に依頼してください。
DPoP 以外の理由でトークン交換が失敗する
dpop_signing_alg を含む失敗ログが見つかっても、必ずしも DPoP が原因で失敗したとは限りません。Auth0 では DPoP が設定されている場合、根本原因が無関係であっても、すべての失敗ログに DPoP のメタデータが追加されます。たとえば、認可コードの有効期限切れや無効なクライアント認証情報により、認証が失敗することがあります。
実際の原因を特定するには、失敗ログのエラー説明を確認してください。DPoP に起因しない一般的なエラーには、invalid_grant、invalid_client、および IDトークン の署名検証エラーがあります。
DPoP キーの生成に失敗する
IdP トークンのバインド
"idp_token_type": "bearer" と表示される場合、Auth0 が DPoP プルーフを送信していても、IdP がトークンを DPoP にバインドしていない可能性があります。RFC 9449 では、これは準拠した動作です。IDプロバイダーは、DPoP にバインドされたトークンを発行するかどうかを完全に制御しているため、次の理由でトークンがバインドされないことがあります。
- IdP のポリシーで、要求されたリソースまたはアプリケーションに対して DPoP が必須になっていない。
- IdP は、プルーフをエラーなく受け入れていても、DPoP をサポートしていない。
- IdP が、DPoP プルーフの処理中に内部的な問題に遭遇した。
DPoP nonce の取り扱い
nonce が必要です。IdP から HTTP 400 と DPoP-Nonce レスポンスヘッダーが返された場合、Auth0 は指定された nonce を使用してトークンリクエストを自動的に再試行します。この処理は透過的に行われるため、テナントログに失敗として記録されることはありません。
use_dpop_nonce エラーコードは、Auth0 と IdP の間でやり取りされる内部的なプロトコルシグナルです。問題を示すものではありません。失敗ログエントリの理由として use_dpop_nonce が表示されることはありません。nonce を付けて再試行しても失敗した場合 (たとえば、IDプロバイダーが 2 回目の試行で invalid_dpop_proof を返した場合) 、失敗ログには最終的なエラーが表示されます。
IDプロバイダーが nonce を必要とする接続で認証失敗が繰り返し発生する場合は、Auth0 と IDプロバイダー間のネットワーク接続を確認してください。nonce のやり取りではトークンエンドポイントに対して 2 往復の通信が必要になるため、ネットワークタイムアウトの影響を受けやすくなります。