Add an async user-consent broker for always-on agents
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 8.7k
- Forks
- 1.3k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 253
Description
Problem Statement
Always-on agents may need explicit user authorization when the user is not actively in session: new resource consent, step-up authentication, or sensitive action approval. Today the practical choices are fail the task, require an active session, or use an over-privileged service account. None preserve user attribution and isolation simultaneously.
Proposed Design
- Expose an async consent request API with principal, resource, scope/action, reason, expiry, and correlation ID.
- Initiate CIBA or equivalent provider-specific approval with the identity provider.
- Return a pending handle to the agent; never return token material.
- Allow the agent to suspend and resume when the handle becomes approved, denied, expired, or failed.
- Store approved tokens under the same gateway-side custody, attenuation, and audit rules as other broker-issued credentials.
Acceptance criteria:
- An agent can request consent, receive a pending handle, suspend, and resume after approval without seeing the resulting token.
- Approved, denied, expired, and failed consent states are explicit and machine-readable.
- Consent request, user approval, token acquisition, and downstream token use share correlation IDs.
- The design composes with gateway/operator approval rather than replacing it.
Alternatives Considered
- Fail whenever consent is missing: safest, but blocks useful autonomous workflows.
- Use long-lived service-account access: operationally easy, but undermines user attribution and least privilege.
- Require active interactive sessions for all user-scoped work: reduces autonomy and creates brittle UX.
Agent Investigation
- OpenShell has gateway-mediated policy decisions and operator-style approval concepts, but no documented user-scoped async consent broker for IdP-issued tokens.
- Providers v2 refresh strategies (
oauth2_client_credentials,oauth2_refresh_token,google_service_account_jwt,static,external) are all machine-credential or pre-acquired-token shaped; none initiate user consent. - CIBA is one relevant standard, but the feature should be an async consent abstraction that can use CIBA or provider-specific step-up mechanisms where supported.
References:
- OIDC CIBA core spec: https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html
- OpenShell Providers v2 (refresh strategies): https://docs.nvidia.com/openshell/sandboxes/providers-v2
Checklist
- I've reviewed existing issues and the architecture docs
- This is a design proposal, not a "please build this" request
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the existing architecture documentation, OpenShell Providers v2 refresh strategies, and the referenced OIDC CIBA core specification. Define an async consent abstraction and document how pending, approved, denied, expired, and failed states, correlation IDs, token custody, and gateway/operator approval satisfy the acceptance criteria.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- authentication, authorization, backend-api-design, security
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100