Summary
Add support for Client-Initiated Backchannel Authentication (CIBA) as defined in RFC 9126 and the OpenID Connect CIBA spec. CIBA enables headless AI agents to initiate authentication on behalf of a user without requiring a browser redirect — the user approves via an out-of-band channel (push notification, email, or voice call).
Motivation
CIBA is a critical flow for autonomous agent scenarios where:
- An agent needs user authorization but has no browser context (e.g., background orchestrators, CLI tools, MCP servers)
- A human-in-the-loop approval step is required before an agent acts on behalf of a user
- The agent operates in a headless environment (server-side, container, CI/CD pipeline)
This was identified as a gap compared to other agent identity platforms that support CIBA for headless agent approval flows.
Requirements
New Grant Type
Authentication Request
User Approval
Token Issuance
Storage
Integration with Existing Features
Non-Goals (for initial implementation)
- Built-in push notification or SMS delivery (pluggable interface only)
- CIBA with signed authentication requests (JWT-secured authorization requests)
References
Summary
Add support for Client-Initiated Backchannel Authentication (CIBA) as defined in RFC 9126 and the OpenID Connect CIBA spec. CIBA enables headless AI agents to initiate authentication on behalf of a user without requiring a browser redirect — the user approves via an out-of-band channel (push notification, email, or voice call).
Motivation
CIBA is a critical flow for autonomous agent scenarios where:
This was identified as a gap compared to other agent identity platforms that support CIBA for headless agent approval flows.
Requirements
New Grant Type
urn:openid:params:grant-type:cibaas a new grant typePOST /oauth2/bc-authorize)auth_req_idAuthentication Request
login_hint(user identifier — email, phone, user ID)scopeandbinding_message(human-readable context for approval prompt)requested_expiryfor auth request TTL (default configurable, bounded by credential policy)auth_req_id,expires_in, andinterval(polling interval)User Approval
BackchannelNotifierinterface for pluggable notification delivery:Server.SetBackchannelNotifier()hook for registrationPOST /oauth2/bc-authorize/{auth_req_id}/approve)Token Issuance
grant_type=urn:openid:params:grant-type:cibaactclaim if agent is acting on behalf of userrequested_expiryor server defaultStorage
backchannel_auth_requeststable:auth_req_id,account_id,project_id,client_id,login_hint,scope,binding_message,status(pending/approved/denied/expired),expires_at,created_atIntegration with Existing Features
subject_tokenin token exchangeNon-Goals (for initial implementation)
References