Skip to content

Per-Client Overrides

Each registered OAuth2 client can override a subset of the global runtime settings. Overrides are stored in the clients table and applied per-request based on the client_id in the authorization request.

Unset overrides (null) fall through to the current global runtime settings. There is no need to repeat the global default — only set what differs.

FieldTypeDescription
access_token_expirationduration stringAccess token lifetime for tokens issued to this client. Example: "30m".
refresh_token_expirationduration stringRefresh token lifetime for this client. Example: "168h" (7 days).
authorization_code_expirationduration stringAuth code TTL for this client.
allowed_audiencesstring arrayAdditional aud values added to access tokens for this client. Example: ["https://api.example.com"].
allow_self_signupbooleanOverride the global allow_self_signup setting for this client’s login page.
sso_session_idle_timeoutduration stringOverride the IdP session idle timeout for sessions originating from this client.
trust_device_enabledbooleanEnable or disable trusted devices for users authenticating through this client.
trust_device_expirationduration stringOverride trusted device token lifetime for this client.

Via Admin UI: Clients → select a client → Edit → expand the Overrides section.

Via API at registration:

Terminal window
curl -X POST https://auth.example.com/oauth2/register \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"client_name": "Mobile App",
"client_type": "public",
"redirect_uris": ["myapp://callback"],
"grant_types": ["authorization_code", "refresh_token"],
"access_token_expiration": "30m",
"refresh_token_expiration": "168h",
"trust_device_enabled": true,
"trust_device_expiration": "720h"
}'

Via API on an existing client:

Terminal window
curl -X PUT https://auth.example.com/oauth2/register/YOUR_CLIENT_ID \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"access_token_expiration": "1h",
"allowed_audiences": ["https://api.example.com", "https://other-api.example.com"]
}'

Given this global configuration:

access_token_expiration = 15m
trust_device_enabled = false

And a client configured with:

{
"access_token_expiration": "1h",
"trust_device_enabled": true
}

Requests from that client will produce access tokens valid for 1 hour, with trusted device support enabled, while all other clients continue to use the 15-minute default with trusted devices disabled.