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

Client as resource owner

23

An API can confuse a client identity with a user identity when both occupy the same identifier namespace.

Related RFCs and changes

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

RFC 9700 · § 4.15DEFENSE
3 / 3
Client as resource ownerAn API can confuse a client identity with a user identity when both occupy the same identifier namespace. Current state: Enforce the correct principal’s permissions..Client as resource ownerHuman userClient applicationuser: user-123client_id: user-123preserve principal typesclient ≠ user
03
Enforce the correct principal’s permissions.

A client identity does not become a user identity through a matching string.

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

The BCP adds defenses against confusing client-only token subjects with resource-owner identities.

Read the updated RFC section ↗
KEY POINT

Keep application and user identities distinct.

  • Where client IDs and user identifiers share a namespace, servers SHOULD NOT let clients choose claims that collide with real users.
  • If that influence cannot be avoided, the authorization server MUST provide other means to distinguish client-only tokens from user-involved tokens.
  • Resource authorization must respect which kind of principal a token represents.
DETAILS

In a client-credentials grant, sub can represent the application. In a user-involved grant, sub can represent the resource owner. The same raw string must not accidentally confer the same authority.

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

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 ↗