Skip to content
ecdsa.com

DPoP (Demonstrating Proof of Possession)

The OAuth mechanism of RFC 9449 that binds access and refresh tokens to a client-held key: every request carries a fresh signed DPoP proof JWT, so a stolen token alone is useless.
Also written asDPoPRFC 9449dpop+jwtDPoP proof

The client generates a key pair (usually ES256), sends a DPoP header containing a JWT with typ dpop+jwt, the public key in the jwk header, and claims jti, htm (HTTP method), htu (URL without query and fragment), iat and, when presenting an access token, ath (its SHA-256 hash). The authorization server binds the issued token to the key's thumbprint (cnf.jkt), and resource servers check the proof on every call; servers can demand a server-supplied nonce to limit pre-computed proofs.

DPoP works at the application layer, so it survives TLS-terminating proxies and suits browsers and mobile apps, unlike mTLS-bound tokens (RFC 8705). Resource servers must check jti uniqueness within a short window, the method and URL, and that the proof key matches the token. The DPoP inspector validates a proof and its token binding.

Standards and references

All terms