Visual RFC.
ALL RFCs / RFC 8252
Read the RFC ↗
RFC 8252 / NATIVE-APP AUTHORIZATION

A browser round trip, protected by PKCE

02

Public native apps need a proof that binds the authorization request to its code exchange.

Related RFCs and changes

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

DIAGRAM§ 6 ↗
RFC 8252 · § 6EXAMPLE
4 / 4
A browser round trip, protected by PKCEPublic native apps need a proof that binds the authorization request to its code exchange. Current state: The initiating app redeems the code..A browser round trip, protected by PKCEClientverifier BAuthorization servercode B · challenge Bmethod: S256codecode + verifier Bproof matchestoken issued
04
The initiating app redeems the code.

The token endpoint verifies the binding.

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
WHAT CHANGED
RFC 8252 § 8.1RFC 9700 § 2.1.1

The later BCP explicitly requires PKCE for all public clients and recommends it for confidential clients, with downgrade prevention at the server.

Read the updated RFC section ↗
KEY POINT

An intercepted code should be unusable alone.

  • Public native apps MUST implement PKCE, and authorization servers MUST support it for them.
  • Generate a fresh verifier and send the corresponding challenge with the initial request.
  • Servers SHOULD reject native-app authorization requests that omit PKCE (§ 8.1).
DETAILS

RFC 9700 later extends explicit PKCE requirements across public OAuth clients, not just native apps.

Read the RFC section ↗

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

Privacy
All chapters in this RFC
  1. Leave login to the browser
  2. A browser round trip, protected by PKCE
  3. Private-use callback schemes
  4. Claimed HTTPS callbacks
  5. Loopback callbacks on desktop
  6. Register the full callback
  7. Bind the response to the app’s request
  8. Fake browsers and client impersonation
  9. Server support and implicit-flow limits
RFC 9700 / CHAPTERS

Chapters

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

RFC status and corrections ↗