Visual RFC.
ALL RFCs / RFC 9700
Read the RFC ↗
RFC 9700 / ATTACKS & DEFENSES

Refresh token protection

22

Refresh tokens can mint future access. Rotation makes reuse visible; sender constraints make possession alone insufficient.

Related RFCs and changes

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

RFC 9700 · § 4.14DEFENSE
4 / 4
Refresh token protectionRefresh tokens can mint future access. Rotation makes reuse visible; sender constraints make possession alone insufficient. Current state: Revoke the active refresh token..Refresh token protectionR1invalidatedR2active replacementrotatereuse R1old tokenreuse detectedRevoke active R2; the thief is not identifiable
04
Revoke the active refresh token.

Stop further refreshes and require a new authorization grant.

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

Public-client refresh tokens need replay protection. Rotation invalidates the previous token, retains its relationship, and revokes the active refresh token when reuse is detected.

Read the updated RFC section ↗
KEY POINT

Bind or rotate. Detect and stop reuse.

  • Servers MUST risk-assess refresh-token issuance and bind issued tokens to consented scopes and resource servers.
  • For public clients, servers MUST use sender-constrained refresh tokens or rotation to detect replay.
  • With rotation, invalidate the previous token and retain the relationship. Reuse triggers revocation of the active refresh token. Tokens SHOULD expire after inactivity.
DETAILS

Rotation does not identify the thief: either the client or attacker can present the old token first. Detection revokes the active refresh token and requires a fresh grant. Security events such as logout or password changes MAY also trigger revocation.

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 ↗