auth0-dpop について
Auth0 DPoP でアクセストークンをクライアント保有の鍵ペアに結び付けるためのセキュリティガイドです。SPA の設定、証明と nonce の処理、対応する Auth0 SDK を説明します。
主な機能
- 01DPoP によるトークン結合の解説
- 02Auth0 API の DPoP 設定
- 03SDK での証明生成の有効化
- 04nonce ローテーションエラーの処理
- 05対応 SPA フレームワークの例
活用シーン
- 01API 呼び出しでのトークン再利用防止
- 02SPA への送信者制約トークンの導入
- 03サーバー発行 DPoP nonce の処理
- 04DPoP 対応 API の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ auth0/ agent-skills --skill auth0-dpopインストール後、Claude Code で/auth0-dpopを入力して読み込まれたか確認します。
同梱ファイルreferences/examples.mdreferences/integration.md
詳細
Auth0 DPoP ガイド
アクセストークンをクライアントの暗号鍵にバインドし、盗まれたトークンがリプレイされないようにします。
概要
DPoP とは?
DPoP(Demonstrating Proof-of-Possession)は、 RFC 9449 で定義されている OAuth 2.0 の仕組みで、 アクセストークンをクライアントが保持する鍵ペアに暗号学的にバインドします。各 API リクエストには、 送信者が秘密鍵を保持していることを証明する、短時間有効な署名付き JWT(DPoP プルーフ)が含まれます。 トークンだけを盗んでも、攻撃者はリプレイできません。
このスキルを使用する場面
- 重要度の高い API 呼び出しをトークンの窃取やリプレイ攻撃から保護する場合
- 送信者制約付きトークンを必須とするセキュリティ要件やコンプライアンス要件を満たす場合
- 強化されたセキュリティが必要な、保護対象の Auth0 API を呼び出すすべての SPA または Vanilla JS アプリ
このスキルを使用しない場面
- SSR/サーバーサイド環境 — DPoP はブラウザー内に保持される秘密鍵に依存するため、サーバーサイド(Next.js、Nuxt など)では安全に使用できません
- DPoP をサポートしていない API — リソースサーバーは DPoP トークン形式を受け入れるよう設定する必要があります。Bearer のみを受け付ける API は DPoP プルーフを拒否します
- トークンの共有が必要なフロー — DPoP トークンは単一の鍵ペアにバインドされており、別のクライアントに転送したり、別のクライアントで再利用したりできません
要件
- DPoP 対応の認可サーバーを備えた Auth0 テナント
- DPoP トークン形式が有効になっている API リソースサーバー
- 次のいずれかを使用するブラウザー SPA:
@auth0/auth0-vue、@auth0/auth0-react、@auth0/auth0-angular、または@auth0/auth0-spa-js - 本番環境では HTTPS(Auth0 の DPoP 要件)
主な概念
| 概念 | 説明 |
|---|---|
| DPoP Proof | 鍵を保持していることを証明する、各リクエストに付加される短時間有効な署名付き JWT |
| DPoP Nonce | リプレイを防ぐため、プルーフに含める必要があるサーバー発行の値 |
useDpop: true | DPoP プルーフの自動生成を有効にする SDK オプション |
createFetcher() | プルーフを自動的に処理する、fetch 互換関数を返す SDK ヘルパー |
UseDpopNonceError | サーバーが処理中に nonce をローテーションした際にスローされるエラー。新しい nonce を使って再試行します |
ステップ 1:API で DPoP を有効にする
Auth0 Dashboard から設定する
- Applications → APIs に移動します
- SPA が呼び出す API を選択します
- Settings タブで、API 識別子が
audienceと一致していることを確認します - Dashboard で追加の切り替え操作は不要です。API リソースサーバーが DPoP トークンを受け入れるよう設定されている場合、 クライアントがリクエストごとに DPoP を有効にします
Auth0 CLI から設定する
# 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"}'
上記の GET 呼び出しで返された ID に
{API_ID}を置き換えてください。
ステップ 2:アプリケーションを設定する
すべてのフレームワークで共通するパターン
audienceとともに、Auth0 クライアント/プロバイダーの設定にuseDpop: trueを追加します- トークンを手動で設定する代わりに
createFetcher()を使用します。プルーフの生成、nonce の管理、ヘッダーの挿入は SDK が自動的に処理します - サーバーが nonce をローテーションする場合に備えて、
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
追加リソース
フレームワークの例
サポートされているすべてのフレームワークの完全な実装例:
- Vue.js
- React
- Angular
- auth0-spa-js(Vanilla JS)
インテグレーションガイド
エラー処理とトラブルシューティング:
UseDpopNonceError— nonce のローテーション処理- よくある問題
関連スキル
auth0-vue- Vue.js Auth0 インテグレーションauth0-react- React Auth0 インテグレーションauth0-angular- Angular Auth0 インテグレーションauth0-spa-js- Vanilla JS/フレームワーク非依存の SPA インテグレーションauth0-mfa- 多要素認証
参考資料
コメント
Markdown 対応