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

Limit token privileges

05

A token should carry only the audience, resources, and actions the app actually needs.

Related RFCs and changes

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

DIAGRAM§ 2.3 ↗
RFC 9700 · § 2.3EXAMPLE
4 / 4
Limit token privilegesA token should carry only the audience, resources, and actions the app actually needs. Current state: A different door stays closed..Limit token privilegesaccess tokenaud: calendarscope: calendar:readCalendar APIintended resourceOther APIaud mismatchwrong recipient
04
A different door stays closed.

The payments server rejects this calendar token.

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

Privilege restriction now explicitly includes audience, resources, and actions, with server-side checks on each request.

Read the updated RFC section ↗
KEY POINT

Restrict the audience and the action.

  • Access-token privileges SHOULD be the minimum needed for the use case.
  • Tokens SHOULD be limited to a specific resource server, or a small set. Servers MUST reject a token intended for a different audience.
  • Restrict resources and actions as well. scope, resource, and authorization_details can express the intended bounds.
DETAILS

Audience restriction answers “where?” Scope and detailed authorization answer “what?” A token for reading a calendar should not become a general-purpose account key.

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 ↗