Visual RFC.
ALL RFCs / RFC 9700
Read the RFC ↗
RFC 9700 / THE FOUNDATIONS

Prevent token replay

04

A copied credential should not automatically grant a second caller the same access.

Related RFCs and changes

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

DIAGRAM§ 2.2 ↗
RFC 9700 · § 2.2DEFENSE
3 / 3
Prevent token replayA copied credential should not automatically grant a second caller the same access. Current state: A stolen token alone fails..Prevent token replayaccess tokenbound key: Kscope: calendar:readCalendar APItoken + proof KKey-bound APImissing key proofno bound key
03
A stolen token alone fails.

The thief does not have the key needed to demonstrate the required proof.

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
WHAT CHANGED
RFC 6749 § 6 and 10.3RFC 9700 § 2.2

The BCP recommends sender-constraining access tokens. Public-client refresh tokens must be sender-constrained or rotated to detect replay.

Read the updated RFC section ↗
KEY POINT

Make stolen tokens harder to reuse.

  • Authorization and resource servers SHOULD sender-constrain access tokens, using mechanisms such as mTLS or DPoP.
  • Refresh tokens for public clients MUST be sender-constrained or rotated.
  • Confidential-client refresh tokens remain bound to the client they were issued to.
DETAILS

Sender constraints reduce replay; they cannot save a client whose token and proof key are both compromised. DPoP and mTLS use different proof mechanisms.

Read the RFC section ↗

Diagrams simplify the RFC. Read the linked sections for complete requirements.

Privacy
All chapters in this RFC
  1. OAuth overview
  2. Authorization code + PKCE
  3. Retire unsafe grants
  4. Prevent token replay
  5. Limit token privileges
  6. Authenticate the client
  7. Metadata, TLS & CORS
  8. The attacker model
  9. Redirect URI validation
  10. Referer header leakage
  11. Browser history leakage
  12. Authorization server mix-up
  13. Authorization code injection
  14. Access token injection
  15. Cross-site request forgery
  16. PKCE downgrade
  17. Leakage at resource servers
  18. Misuse of stolen tokens
  19. Open redirection
  20. 307 credential forwarding
  21. TLS termination & proxies
  22. Refresh token protection
  23. Client as resource owner
  24. Clickjacking
  25. In-browser messaging
RFC 9700 / CHAPTERS

Chapters

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

RFC status and corrections ↗