Repository navigation
OAuth 2.1 準拠: 送信者制約付きアクセストークン (DPoP) 対応 #336
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or requestoauth2.1OAuth 2.1 仕様準拠OAuth 2.1 仕様準拠securityセキュリティ関連セキュリティ関連
Description
概要
OAuth 2.1 では Bearer トークンに代わり、送信者制約付きアクセストークン(Sender-Constrained Access Tokens)が SHOULD で推奨されます。DPoP (Demonstrating Proof of Possession, RFC 9449) を導入し、トークン漏洩時の悪用を防止します。
背景
Bearer トークンは「持っている人なら誰でも使える」ため、漏洩時に第三者が悪用可能。DPoP はリクエストごとにクライアントの秘密鍵で署名した Proof JWT を添付することで、トークンを特定の鍵所有者に紐付けます。
参考ツイート: https://x.com/nixieminton/status/2035589742155444320
参考仕様
- https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-10#name-access-token
- https://datatracker.ietf.org/doc/html/rfc9449
DPoP 認証フロー
EC-CUBEプラグイン EcAuth
| |
|-- POST /token |
| DPoP: <proof JWT (jwk含む)> |
| →→→ |
| | DPoP Proof 検証
| | 公開鍵 thumbprint をトークンに紐付け
| ←←← |
| { token_type: "DPoP", |
| access_token: "eyJ..." } |
| |
|-- GET /userinfo |
| Authorization: DPoP eyJ... |
| DPoP: <proof JWT (ath含む)> |
| →→→ |
| | DPoP Proof 検証
| | ath == SHA256(access_token) 確認
| | 公開鍵 thumbprint 一致確認
| ←←← |
| { "sub": "uuid" } |
影響範囲
EcAuth 側
-
TokenController (
/token)DPoPヘッダーから Proof JWT を検証- 公開鍵の JWK Thumbprint (RFC 7638) を計算
- アクセストークン JWT に
cnf.jktクレーム追加
-
UserinfoController (
/userinfo)Authorization: DPoP <token>スキーム対応DPoPヘッダーの Proof JWT 検証athクレーム(アクセストークンの SHA-256 ハッシュ)検証- 公開鍵 thumbprint の一致確認
-
TokenService
- JWT 生成時に
cnf(confirmation) クレーム追加
- JWT 生成時に
-
AccessToken テーブル
dpop_jktカラム追加(公開鍵の thumbprint)
-
DPoP 検証サービス(新規)
- DPoP Proof JWT のパース・署名検証
htm(HTTP method),htu(HTTP URI) の一致確認jtiのリプレイ検出- Nonce 管理(オプション)
EC-CUBE プラグイン側
- 非対称鍵ペア生成・保管
- リクエストごとに DPoP Proof JWT 生成・署名
Authorization: DPoPスキームでのトークン送信
後方互換性
- Bearer と DPoP の並行サポート(段階的移行)
- EC-CUBE プラグインのバージョンで切り替え
実装タスク
- DPoP Proof JWT 検証サービス作成
- AccessToken テーブルに
dpop_jktカラム追加 - TokenController で DPoP ヘッダー検証・トークン紐付け
- TokenService で
cnf.jktクレーム追加 - UserinfoController で
Authorization: DPoPスキーム対応 - Bearer / DPoP 並行サポート
- ユニットテスト
- E2E テスト
優先度
中 — OAuth 2.1 で SHOULD 要件。Phase 2 以降で対応
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestoauth2.1OAuth 2.1 仕様準拠OAuth 2.1 仕様準拠securityセキュリティ関連セキュリティ関連
Activity