Add Pushed Authorization Request (RFC 9126) support
CI / Build Pip package (push) Successful in 14m8s
CI / Build Pip package (push) Successful in 14m8s
OIDCConfig.par selects never (default), auto, or always. When enabled, build_authorization_url pushes the authorization parameters to the provider's PAR endpoint and redirects the browser with only client_id and request_uri. Providers that require PAR raise a clear error when configured with par='never'. Client authentication follows the token endpoint (HTTP Basic or public client).
This commit is contained in:
6 files changed
+379
-16
No files matched your search
@@ -128,6 +128,37 @@ app = KayaApp(mixins=[session, google, github])
|
||||
> default provider is `default`). Existing logged-in users are signed out once
|
||||
> and simply re-authenticate.
|
||||
|
||||
## Pushed authorization requests (PAR)
|
||||
|
||||
`OIDCConfig.par` controls RFC 9126 Pushed Authorization Requests:
|
||||
|
||||
- `'never'` (default): the authorization request travels as query parameters,
|
||||
as before.
|
||||
- `'auto'`: push the request whenever the provider advertises a
|
||||
`pushed_authorization_request_endpoint`; otherwise fall back to the plain
|
||||
redirect.
|
||||
- `'always'`: always push; login raises a `RuntimeError` if the provider does
|
||||
not support PAR.
|
||||
|
||||
```python
|
||||
OIDCConfig(..., par='auto')
|
||||
```
|
||||
|
||||
A provider that advertises `require_pushed_authorization_requests: true` must be
|
||||
configured with `par='auto'` or `par='always'`. With `par='never'` the login
|
||||
fails fast with a clear error instead of issuing a redirect the provider would
|
||||
reject.
|
||||
|
||||
The same parameters as the plain authorization request (PKCE challenge,
|
||||
`state`, `nonce`, scopes, ...) are POSTed directly to the provider, and the
|
||||
browser is redirected with only `client_id` and the single-use `request_uri`.
|
||||
Request parameters therefore no longer travel through the user agent. PKCE,
|
||||
`state`, and `nonce` are still used and protect against request URI swapping.
|
||||
|
||||
Client authentication follows the token endpoint: HTTP Basic when
|
||||
`client_secret` is set, or none for public clients. PAR with other client
|
||||
authentication methods (`private_key_jwt`, mTLS) is not supported.
|
||||
|
||||
## Features
|
||||
|
||||
- Generic OIDC discovery
|
||||
@@ -138,6 +169,7 @@ app = KayaApp(mixins=[session, google, github])
|
||||
- Optional userinfo endpoint fetch
|
||||
- Refresh token support
|
||||
- RP-initiated logout (when provider advertises `end_session_endpoint`)
|
||||
- Pushed Authorization Requests (RFC 9126) via `OIDCConfig.par`
|
||||
- Multiple providers in one app via `OIDCProviders` (or several `OIDCMixin` instances)
|
||||
- `single-identity` (default) or `multi-identity` session strategy
|
||||
- Composable with any other `KayaMixin` (RSGI, MCP, etc.)
|
||||
|
||||
Reference in new issue
Block a user