Visual RFC.
ALL RFCs / RFC 9126
Read the RFC ↗
RFC 9126 / PUSHED AUTHORIZATION REQUESTS

Discover PAR and keep transaction safeguards

05

Metadata signals capability and requirement; Request Objects and transaction checks remain separate protections.

RFC 9126 · § 5EXAMPLE
4 / 4
Discover PAR and keep transaction safeguardsCapability metadata gives an HTTPS PAR endpoint and omits require_pushed_authorization_requests, so its default is false. A separate required-PAR policy blocks a conventional request without a PAR URI. A separate credentialed-client Request Object fragment has client_id client-B while authenticated client-A, and stops acceptance. Finally an exact state mismatch stops a swapped transaction at the client callback. PAR transport does not provide user consent, token validation or all transaction safeguards.Capability, policy and binding are distinctClient’s original transactionstored state: qa-state-Areturned state: qa-state-Bexact stored-state comparison failsReject swapped transaction at the clientKeep original PKCE verifier bound to its challenge
04
Reject a mismatching state at callback.

A separate swapped-reference attempt returns another transaction’s state. The client’s exact stored-state comparison stops it; its retained PKCE verifier also remains bound to the original challenge.

Source for this drawing: RFC 9126 · Read RFC section 5 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A key is different from permission.

An app, a person, and a server have different roles. Follow who asks, who grants permission, and who checks the credential. A key in the drawing is an analogy, not a literal protocol field.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

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

KEY POINT

PAR is a protected delivery path, not a replacement for the rest of OAuth security.

  • Servers supporting PAR SHOULD publish pushed_authorization_request_endpoint in metadata. Its presence suffices to signal capability. Server and client require_pushed_authorization_requests are booleans defaulting to false if omitted.
  • Server policy MAY require PAR globally or per client. When it does, an authorization request without a request_uri obtained from PAR is refused using invalid_request. Merely announcing an endpoint is not the same as requiring it.
  • Clients MAY combine PAR with a JWT-Secured Authorization Request (JAR) Request Object. Its signing/encryption rules apply; authentication material remains separate. If credentials are established, the authenticated client_id MUST match the object’s client_id claim.
  • RFC9126 recommends transaction-specific PKCE, state or an OIDC nonce against reference swapping. This example uses state and PKCE; later RFC9700 requires PKCE for public authorization-code clients. PAR does not replace CSRF, consent, issuer, audience or token validation checks.
DETAILS

Three reported, unverified errata 6711/7254/7410 address Request Object client_id wording and introductory examples. This guide does not treat those reports as approved changes or copy their ambiguous samples. Optional JAR is shown only as a decoded client-binding gate, not a full signed example or a ban on top-level client_id.

Read the RFC section ↗

All chapters in RFC 9126

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 ↗