次のような場合に使用: APIの呼び出しを保護するため、盗まれても再利用できない端末にひも付いたアクセストークン(認証情報)を使う際に、DPoP(デバイスが本物であることを証明する仕組み)を追加する必要があるとき。また、ユーザーが「トークンをクライアントにひも付ける」「トークンの盗難を防ぐ」「送信元を限定したトークン」といった指示をした場合にも活用できます。
Use when adding DPoP (Demonstrating Proof-of-Possession) token binding to protect API calls with device-bound, sender-constrained access tokens that cannot be replayed if stolen. Also use when a user says "bind tokens to the client", "prevent token theft", or "sender-constrained tokens".
アクセストークンをクライアントの暗号化キーに紐付け、盗まれたトークンが再利用されるのを防ぎます。
DPoP(Demonstrating Proof-of-Possession=所有証明の実証)は、RFC 9449 で定義された OAuth 2.0 のメカニズムです。アクセストークンをクライアントが保有する暗号化キーペアに暗号学的に紐付けます。各 API リクエストには短命の署名付き JWT(DPoP プルーフ)が含まれ、送信者が秘密鍵を保有していることを証明します。盗まれたトークンだけでは、攻撃者によって再利用されることはできません。
@auth0/auth0-vue、@auth0/auth0-react、@auth0/auth0-angular、@auth0/auth0-spa-js| 概念 | 説明 |
|---|---|
| DPoP プルーフ | 各リクエストに添付される短命の署名付き JWT で、キー所有を証明 |
| DPoP ノンス | サーバーが発行し、プルーフに含める値で再生攻撃を防止 |
useDpop: true |
DPoP プルーフの自動生成を有効にする SDK オプション |
createFetcher() |
fetch 互換の関数を返す SDK ヘルパー。プルーフ処理を自動で取り扱う |
UseDpopNonceError |
サーバーがフライト中にノンスを変更したときにスロー(送出)されるエラー。新しいノンスで再試行 |
audience と一致することを確認# 現在のリソースサーバー設定を確認
auth0 api get "resource-servers" | jq '.[] | select(.identifier == "https://your-api-identifier")'
# API で DPoP トークン形式を有効化
auth0 api patch "resource-servers/{API_ID}" \
--data '{"token_dialect": "access_token_authz"}'
{API_ID}は上記の GET 呼び出しから返された ID に置き換えてください。
useDpop: true を audience と一緒に追加createFetcher() を使用 — SDK はプルーフ生成、ノンス管理、ヘッダーの注入を自動で処理しますUseDpopNonceError を処理.env に API の audience が含まれていることを確認してください:
# Vite
VITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-id
VITE_AUTH0_AUDIENCE=https://your-api-identifier
サポートされているすべてのフレームワークの実装例:
エラーハンドリングとトラブルシューティング:
UseDpopNonceError — ノンス変更の処理auth0-vue - Vue.js Auth0 統合auth0-react - React Auth0 統合auth0-angular - Angular Auth0 統合auth0-spa-js - Vanilla JS / フレームワーク非依存 SPA 統合auth0-mfa - 多要素認証Bind access tokens to the client's cryptographic key so stolen tokens cannot be replayed.
DPoP (Demonstrating Proof-of-Possession) is an OAuth 2.0 mechanism defined in RFC 9449 that cryptographically binds access tokens to a client-held key pair. Each API request includes a short-lived signed JWT (the DPoP proof) that proves the sender holds the private key — a stolen token alone cannot be replayed by an attacker.
@auth0/auth0-vue, @auth0/auth0-react,
@auth0/auth0-angular, or @auth0/auth0-spa-js| Concept | Description |
|---|---|
| DPoP Proof | A short-lived signed JWT attached to each request proving key possession |
| DPoP Nonce | A server-issued value that must be included in the proof to prevent replay |
useDpop: true |
SDK option that enables automatic DPoP proof generation |
createFetcher() |
SDK helper that returns a fetch-compatible function handling proofs automatically |
UseDpopNonceError |
Error thrown when the server rotates its nonce mid-flight; retry with the new nonce |
audience# Inspect current resource server settings
auth0 api get "resource-servers" | jq '.[] | select(.identifier == "https://your-api-identifier")'
# Enable DPoP token dialect on the API
auth0 api patch "resource-servers/{API_ID}" \
--data '{"token_dialect": "access_token_authz"}'
Replace
{API_ID}with the ID returned from the GET call above.
useDpop: true to your Auth0 client/provider configuration alongside your audiencecreateFetcher() instead of attaching tokens manually — the SDK handles
proof generation, nonce management, and header injection for youUseDpopNonceError in cases where the server rotates its nonceEnsure your .env includes the API audience:
# Vite
VITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-id
VITE_AUTH0_AUDIENCE=https://your-api-identifier
Complete implementation examples for all supported frameworks:
Error handling and troubleshooting:
UseDpopNonceError — nonce rotation handlingauth0-vue - Vue.js Auth0 integrationauth0-react - React Auth0 integrationauth0-angular - Angular Auth0 integrationauth0-spa-js - Vanilla JS / framework-agnostic SPA integrationauth0-mfa - Multi-factor authentication原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。