OAuth 2.0 DPoP (RFC 9449)

OAuth 2.0 Demonstrating Proof of Possession

アクセストークンをClientの公開鍵へ結び付け、盗まれたBearer Tokenの第三者による再利用を防ぐSender-Constrained Token仕様です。

STATUSPublished September 2023FLOWS0 documentedPrimary specification ↗

この仕様は、
何を解決するのか。

アクセストークン漏えい後の再利用まで防ぎたいAPI設計者や、Bearer TokenとSender-Constrained Tokenの違いを学びたい人向けです。

DPoPは、OAuthアクセストークンをClientが持つ鍵ペアへ結び付ける仕組みです。通常のBearer Tokenは持っている人なら誰でも利用できますが、DPoP Tokenは対応する秘密鍵でリクエストごとの証明を作れるClientだけが利用できます。

ClientはToken EndpointとResource ServerへのリクエストごとにDPoP Proof JWTを作ります。ProofにはHTTP Method、送信先URI、発行時刻、一意なjtiなどが含まれ、Resource Serverは署名と内容、アクセストークンとの鍵Bindingを検証します。

仕様が定める、大切なこと。

01

Tokenを鍵へ結び付ける

Authorization ServerはClient公開鍵のthumbprintをアクセストークンへ記録し、Resource Serverが同じ鍵の証明を要求できるようにします。

02

漏えいTokenの再利用を防ぐ

攻撃者がアクセストークンだけを取得しても、対応する秘密鍵がなければ有効なAPIリクエストを作れません。

03

リクエスト単位で証明する

htmとhtuでProofをHTTPリクエストへ結び付け、別Endpointや別Methodへの転用を防ぎます。

01DPoP Proof JWT02Public-key Binding03dpop+jwt04jti / htm / htu05Token Replay Protection

安全に使うための確認事項。

仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。

  1. 01

    秘密鍵はClient外へ出さず、可能ならOSのKey Storeやハードウェア保護領域へ保存します。

  2. 02

    Resource Serverは署名、typ、jti、iat、htm、htu、athと公開鍵Bindingをまとめて検証します。

  3. 03

    Proofのjtiと短い有効時間を利用してReplayを検出し、必要に応じてServer Nonceを要求します。

  4. 04

    DPoPはTLSを置き換えません。TokenとProofは常にHTTPSで送信します。

ほかの仕様との関係

DPoPはOAuth 2.0のBearer TokenをSender-Constrained Tokenとして強化します。相互TLSも同じ目的を持ちますが、DPoPはアプリケーション層の鍵証明を使うため、Public Clientやプロキシを含む構成で採用しやすい特徴があります。

OAuth 2.0 (RFC 6749)The OAuth 2.0 Authorization FrameworkOAuth 2.0 Device Authorization (RFC 8628)OAuth 2.0 Device Authorization GrantOAuth 2.1OAuth 2.1 Authorization FrameworkOpenID Connect Core 1.0OpenID Connect Core 1.0FIDO2 WebAuthn Level 3Web Authentication: Public Key CredentialsFIDO2 CTAP 2.2Client to Authenticator ProtocolFIDO UAF 1.1Universal Authentication FrameworkFIDO U2F 1.2Universal Second FactorOpenID Connect CIBA Core 1.0Client-Initiated Backchannel AuthenticationOAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public ClientsJSON Web Token (RFC 7519)JSON Web Token (JWT)SAML 2.0Security Assertion Markup Language 2.0SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol