Skip to content

OAuth 2.1 準拠: 送信者制約付きアクセストークン (DPoP) 対応 #336

Open

Description

@nanasess

概要

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

参考仕様

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 側

  1. TokenController (/token)

    • DPoP ヘッダーから Proof JWT を検証
    • 公開鍵の JWK Thumbprint (RFC 7638) を計算
    • アクセストークン JWT に cnf.jkt クレーム追加
  2. UserinfoController (/userinfo)

    • Authorization: DPoP <token> スキーム対応
    • DPoP ヘッダーの Proof JWT 検証
    • ath クレーム(アクセストークンの SHA-256 ハッシュ)検証
    • 公開鍵 thumbprint の一致確認
  3. TokenService

    • JWT 生成時に cnf (confirmation) クレーム追加
  4. AccessToken テーブル

    • dpop_jkt カラム追加(公開鍵の thumbprint)
  5. 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 以降で対応

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestoauth2.1OAuth 2.1 仕様準拠securityセキュリティ関連

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions