Pushed Authorization Requests (PAR)
Learn how Pushed Authorization Requests (RFC 9126) move authorization parameters to a secure back-channel call, improving integrity and confidentiality for advanced OAuth2 deployments.
Pushed Authorization Requests (PAR) is a free OAuth2 & OpenID Connect Deep Dive lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the OAuth2 & OpenID Connect Deep Dive learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
The Front-Channel Problem
Normally authorization parameters travel in the browser URL to /authorize. They are visible, can be tampered with, and get long when requests are rich (claims, multiple resources). PAR moves them to a trusted back-channel.
What PAR Does
With Pushed Authorization Requests (RFC 9126), the client first POSTs all authorization parameters directly to a new pushed_authorization_request endpoint. The server stores them and returns a request_uri handle.
Step 1: Push the Request
The client authenticates and sends the parameters server-to-server.
POST /par HTTP/1.1
Host: op.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <client creds>
response_type=code&client_id=app123
&scope=openid profile&redirect_uri=https://app/cb
&state=xyz&code_challenge=...&code_challenge_method=S256Step 2: Receive request_uri
The server validates and stores the request, returning a one-time request_uri plus an expiry.
{
"request_uri": "urn:ietf:params:oauth:request_uri:6esc_11ACC5bwc014ltc14",
"expires_in": 60
}Step 3: Redirect With the Handle
Now the browser redirect to /authorize carries only the client_id and the request_uri — nothing sensitive in the URL.
GET /authorize?client_id=app123
&request_uri=urn:ietf:params:oauth:request_uri:6esc_11ACC5bwc014ltc14Integrity and Confidentiality
Because parameters were pushed over an authenticated TLS channel, the user-agent cannot tamper with them, and they are not exposed in browser history, logs, or referrer headers. This raises assurance significantly.
Client Authentication at PAR
The PAR endpoint requires the client to authenticate (secret, mTLS, or private_key_jwt). This means the authorization request itself is tied to a verified client before the user ever sees the consent screen.
Short-Lived, One-Time Handles
The request_uri is short-lived (often 60 seconds) and intended for single use. After the authorization request consumes it, it cannot be replayed.
PAR and FAPI
PAR is a building block of FAPI 2.0 and financial-grade security profiles, where front-channel tampering must be eliminated. Many high-assurance deployments mandate PAR for all authorization requests.
Discovery Support
Providers advertise PAR via discovery metadata, including pushed_authorization_request_endpoint and optionally require_pushed_authorization_requests to enforce it.
{
"pushed_authorization_request_endpoint": "https://op.example.com/par",
"require_pushed_authorization_requests": true
}When to Use PAR
Adopt PAR for confidential clients in regulated or high-value contexts, when requests carry sensitive parameters, or when you want to guarantee request integrity. It pairs naturally with PKCE and mTLS-bound tokens.
Quick Check
Test your PAR knowledge.
Recap
Pushed Authorization Requests (RFC 9126) move authorization parameters to a back-channel.
- The client POSTs parameters to the PAR endpoint and gets a
request_uri. - The browser redirect carries only
client_id+request_uri. - This guarantees request integrity/confidentiality and authenticates the client up front.
- PAR is a cornerstone of FAPI-grade security.
Frequently asked questions
Is the “Pushed Authorization Requests (PAR)” lesson free?
Yes — the full text of “Pushed Authorization Requests (PAR)” is free to read here on the web, and the OAuth2 & OpenID Connect Deep Dive course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the OAuth2 & OpenID Connect Deep Dive course, upgrade to CoddyKit PRO.
What will I learn in “Pushed Authorization Requests (PAR)”?
Learn how Pushed Authorization Requests (RFC 9126) move authorization parameters to a secure back-channel call, improving integrity and confidentiality for advanced OAuth2 deployments. You practise OAuth2 & OpenID Connect Deep Dive with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start OAuth2 & OpenID Connect Deep Dive?
No prior experience is required. OAuth2 & OpenID Connect Deep Dive on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Pushed Authorization Requests (PAR)” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this OAuth2 & OpenID Connect Deep Dive lesson?
Yes. Every OAuth2 & OpenID Connect Deep Dive lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- FAPI & Financial-grade APIs
- DPoP (Demonstrating Proof-of-Possession)
- Continuous Access Evaluation Protocol (CAEP)
- Pushed Authorization Requests (PAR)