DPoP (Demonstrating Proof of Possession)
An OAuth method that binds a token to a key the client holds.
DPoP (OAuth 2.0 Demonstrating Proof of Possession, RFC 9449) binds an access token to a public key the client holds. With each token request and each API call, the client sends a DPoP header: a short JWT, signed with its private key, naming the HTTP method and URL. A stolen DPoP-bound token is useless without that key, unlike a bearer token.
DPoP works at the application layer, so it suits clients that cannot use mutual TLS, such as browser and mobile apps. A server can also issue a DPoP-Nonce to limit how long a proof stays usable. It is one of the two ways FAPI 2.0 accepts for binding tokens to a client; the other is mutual TLS.
Worked example
A proof for POST https://api.example.com/transactions carries htm POST, htu https://api.example.com/transactions, the time it was issued, a unique jti and a hash of the access token, all signed with the client’s private key. The server checks the signature against the key the token is bound to, and refuses a jti it has already seen.
Common mistake
Reusing one DPoP proof for every call. Each proof names one method and URL and is meant to be fresh, with its own jti, so a server refuses a proof that was replayed or minted for a different request.
Grounded in IETF — RFC 9449, OAuth 2.0 DPoP guidance. Figures last checked . General information, not tax advice.
Related terms
FAPI 2.0
The OpenID Foundation’s high-security OAuth profile for financial APIs.
Pushed authorization request (PAR)
Sending OAuth request parameters to the server directly, not through the browser.
ISO 20022
The international standard for financial messages — payments, statements and more.
camt.053 (ISO 20022 bank statement)
The end-of-day bank statement in ISO 20022 XML.
← Back to the full glossary.
Questions about this term
DPoP (Demonstrating Proof of Possession): common questions
- What is the difference between DPoP and mutual TLS?
- Both bind a token to the client, so a stolen token cannot be replayed by someone else. Mutual TLS binds it to the client’s TLS certificate at the connection layer; DPoP binds it to a key the client proves it holds with a signed header on each request, which works where client certificates are impractical.
- Does DPoP replace PKCE?
- No. PKCE protects the authorization code on its way from the authorization endpoint to the token endpoint, while DPoP protects the access and refresh tokens after they are issued. High-security profiles such as FAPI 2.0 use the two together.
- What is the ath claim in a DPoP proof?
- It is the base64url-encoded SHA-256 hash of the access token. A proof sent with an API call includes it, so the proof is tied to that particular token as well as to the method and URL of the request.
Let Fin handle the jargon for you
Connect your bank and Fin sorts your income, expenses and GST automatically — so terms like this just become numbers that are already worked out. Free to start, no card needed.
Get 2Fin free →