Add Pushed Authorization Requests (RFC 9126) Support #2298
Replies: 3 comments
-
For the initial implementation, shall we not do any additional changes, validations or special-casing for the PAR initialized flows compared to the usual front-channel flow?
Gate app/sdk shouldn't have any changes since the authorization flow redirection from backend->gate and the authentication callback will remain the same.
+1 to have this.
IMO, any client should be able to initialize with PAR. The config should only mandate whether the PAR is must. |
Beta Was this translation helpful? Give feedback.
-
|
IMO, we should not restrict this to specific client authentication method.
But what we will need is a way to restrict the supported client_authentication_methods at deployment. So that it is easier to run the authorisation server with strict adherence to security profiles.
If the client is marked as public, it is assumed that secrets cannot be kept by the client (mobile, SPA) or might not even register with JWKS. So it's better to reject PAR by public clients. |
Beta Was this translation helpful? Give feedback.
-
|
As per discussion with thunder team, we have decided not to restrict PAR for public clients. PAR will follow the same client authentication method as of token endpoint. if token endpoint client authentication method is set to NONE then implementation processes PAR without client authentication(This also aligns with the RFC). |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Pushed Authorization Requests
RFC 9126 — Pushed Authorization Requests (PAR) allows OAuth 2.0 clients to push authorization request parameters directly to the authorization server over a back-channel and receive a
request_uriin return. The client then redirects the user to the authorization endpoint with just theclient_idandrequest_uri, keeping sensitive parameters out of the browser.Changes Required in Thunder
New PAR Endpoint
Introduce a
POST /oauth2/parendpoint that:application/x-www-form-urlencodedform data.request_uriparameter.201 Createdwith a JSON body containingrequest_uri(cryptographically random, single-use) andexpires_in.Request URI Storage
Store pushed authorization request data keyed by the generated
request_uri. Each entry must track:client_id.Authorization Endpoint Changes
Modify the
/oauth2/authorizehandler to:request_uriquery parameter.client_idmatches, check expiration, and mark the URI as used.invalid_requestif the URI is expired, already used, or bound to a different client.request_uri.Discovery Metadata
Add two fields to the OAuth 2.0 Authorization Server Metadata (
/.well-known/oauth-authorization-server) response:pushed_authorization_request_endpoint— the PAR endpoint URL.require_pushed_authorization_requests— boolean indicating whether PAR is mandatory (defaults tofalse).Questions
require_pushed_authorization_requestsbe configurable at both the application level and the deployment level? If both are set, does the stricter setting (application-level enforce) win, or does the global setting override?eSignet support both client level and deployment level configuration, with the stricter setting taking precedence. If either the client or deployment requires PAR, then PAR is enforced for that client.
expires_invalue be? RFC 9126 suggests short lifetimes (e.g., 60 seconds).RFC 9126 allows public clients (no client secret) to use PAR. Should Thunder support this from the start, or limit PAR to confidential clients initially?Public client not supported in PAR.Beta Was this translation helpful? Give feedback.
All reactions