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

Read the pushed form and its response

02

A UTF-8 form carries authorization parameters; a successful JSON response gives the bound reference and its lifetime.

RFC 9126 · § 2.1EXAMPLE
4 / 4
Read the pushed form and its responseActual form fragments join without whitespace, preserve a once-percent-encoded HTTPS callback and space-separated scopes, and carry a public PKCE S256 challenge without its verifier. A separate local SHA-256 derivation uses the public RFC7636 AppendixB fixture. A separate invalid form containing request_uri stops at the PAR gate. A201JSON response contains fixed example request_uri and numeric expires_in60 bound to picnic-app. Fixed fixtures are not production entropy or a complete HTTP message.Read the actual parameters and responseHTTP 201 Created · application/json{"request_uri":"urn:example:par:request-A","expires_in":60}Server binding: client_id picnic-appLifetime: 60 seconds · example valueReference only · no access_token or codeReal references MUST include an unpredictable part
04
Read reference, lifetime and binding.

The response binds the example URI to picnic-app with a 60-second lifetime. This is stored request data, not a token or proof of user approval.

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

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

The pushed request body is an authorization request, not a token request.

  • The client uses POST with application/x-www-form-urlencoded and UTF-8. client_id is required; applicable client-authentication parameters serve authentication only. request_uri MUST NOT be supplied to the PAR endpoint.
  • This public-client example uses PKCE (Proof Key for Code Exchange) with S256 and a state value. The verifier stays with the client; only its derived challenge goes into the authorization request. Later RFC9700 §2.1.1 requires PKCE for public code-flow clients.
  • After successful verification, the server MUST generate a request URI and return HTTP 201 with JSON request_uri and expires_in. expires_in is a positive integer number of seconds; 60 here is an example, not a mandated lifetime.
  • The URI MUST bind to the pushing client and include a cryptographically strong unpredictable part. The fixed teaching URI is deliberately not a production random value; referenced entropy guidance is in RFC9101 §10.2(d).
DETAILS

All identifiers, state values and code verifiers shown are public teaching fixtures. Real requests need fresh transaction binding and unpredictable references. Selected headers/fields are illustrated, not a complete HTTP message with framing. Example supports public clients without authentication credentials, as permitted by OAuth client-type rules.

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 ↗