Visual RFC.
ALL RFCs / RFC 9449
Read the RFC ↗
RFC 9449 / PROOFS AND PERMISSION

Check the signature before trusting the note

02

The app writes a small note about this request and signs it using its secret key. A public key checks the signature; reading the note is not checking it.

RFC 9449 · § 4.3EXAMPLE
1 / 4 · Write a note about this request

The selected public fixture names POST at the issuer’s token endpoint. It is not an access token.

A signed note has three partsHeaderdpop+jwt · ES256jwk: public key A
Headertyp: dpop+jwt · alg: ES256 · public key A

Offline worked example. Signature fixtures and key/token hashes can be checked locally; ordinary OAuth, TLS and deployment policy checks remain separate. This is not a production validator.

What happens if you change this?

Predict whether the request will pass. Change one choice to see why; use Restart to restore the original example.

Check this public signature in your browser

This checks the signed bytes with the included public key. It is separate from header-count, request, time, nonce and token checks.

Interactive local signature check loads with the reader.
4 / 4
04
Stop at the failed check

The one proof has the required type and an allowed public-key signature. The remaining request/time/token checks still have separate jobs.

Check the signature before trusting the noteThe one proof has the required type and an allowed public-key signature. The remaining request/time/token checks still have separate jobs.A signed note has three partsHeaderdpop+jwt · ES256jwk: public key APayloadPOST /tokenThese bytes are signedSignatureCheck with public A✓ Example checks pass; more checks still needed

Key idea: A valid signature is necessary, but the proof also has to follow the DPoP rules.

Terms
DPoP
A separately signed note proving use of a key for a particular request. It accompanies, rather than replaces, the access token.
Public key and private key
The shareable key checks signatures. The matching secret key makes them. A public key is not a registered app identity by itself.

Look up a term in the glossary ↗

Rules & examples

These reference examples may differ from the selected experiment.

  • There must not be more than one DPoP header. Its value must be a single well-formed JWT with all required claims.
  • typ must be dpop+jwt. alg must be a supported, locally acceptable registered asymmetric signing algorithm, never none or a symmetric MAC algorithm. The public jwk must not contain a private key.
  • The complete proof includes method, target URI, creation time and a suitably unique identifier; token use adds ath, and a supplied server nonce adds nonce. The browser exercise checks a public ES256 signature fixture, not all production JWT/TLS requirements.

Bounded offline worked example, not a production OAuth, TLS or general JWT validator. Cryptographic signature fixtures and public-key/token hashes are independently checked.

Sources
Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A message needs an address.

Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

All chapters in RFC 9449

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗