| Internet-Draft | Agent Principal Oversight | November 2026 |
| McGuinness | Expires 15 May 2027 | [Page] |
The OAuth 2.0 Profile for Agent Principal Federation decides which enterprise-governed agent acts, for whom, and under what authorization, and an identity provider issues the resulting grant without a person present. It bounds what an external approval can do but leaves asynchronous approval undefined.¶
This document defines three oversight modes for governed agent access. With a human in the loop, an authenticated person decides on the exact governed request before a grant issues or an action executes. With a human on the loop, grants issue at once, but each can be observed and ended with a defined effect within a documented bound. With the human out of the loop, standing authorization applies with no per-request decision. The document profiles OAuth Deferred Token Response so that an identity provider can hold a governed grant until a person decides, binds that decision to the resolved agent, user, client, target, authority, and proof key, and requires the grant that follows to be the one the request would have produced. A resource authorization server can likewise hold the redemption of a governed grant, binding the approval to that one redemption and bounding what it issues by the approval's expiry. The document also describes how Model Context Protocol servers hold tool calls under these modes.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://mcguinness.github.io/agent-principal-profiles/draft-mcguinness-oauth-governed-agent-oversight.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-mcguinness-oauth-governed-agent-oversight/.¶
Discussion of this document takes place on the Web Authorization Protocol Working Group mailing list (mailto:oauth@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/oauth/. Subscribe at https://www.ietf.org/mailman/listinfo/oauth/.¶
Source for this draft and an issue tracker can be found at https://github.com/mcguinness/agent-principal-profiles.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 15 May 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Under [FEDERATION], an identity provider (IdP) issues a governed grant when a Delegation Authorization or an Agent Authorization permits the request. The basis of those authorizations is a deployment choice: administrator assignment, organizational policy, task authorization, or user consent ("Authorization Relationships" in [FEDERATION]). Each is decided before the request arrives. Many deployments also need a person to decide at the moment an agent asks for something sensitive, or at least to see each grant as it issues and be able to stop it.¶
The pieces for that exist separately. OAuth Deferred Token Response [DTR] lets a token endpoint answer later. OpenID Client-Initiated Backchannel Authentication [CIBA] reaches a person out of band. AuthZEN's access request profiles route an approval and complete it as a token ([ARAP], [AROP]). Model Context Protocol [MCP] servers can hold a tool call while they wait. None of them says which agent, user, and authority an approval covers when the requester is a governed agent, or what grant follows it. [DTR] does not say that the token it eventually returns keeps the original subject, actor, or client.¶
[FEDERATION] answers who acts, for whom, and under what authorization. [DTR] answers how a token endpoint waits. This document answers when a person must decide, what the decision binds to, and what grant follows it. It defines:¶
three oversight modes, and how policy selects them (Section 3);¶
deferred governed issuance: the pending request, who may approve it, what an approval can change, and the checks and grant at resolution (Section 4);¶
deferred redemption: holding the redemption of a governed grant at the RAS until an approver decides, the approval's binding to that redemption, recovery, and the tokens that follow (Section 5);¶
supervised issuance: what an IdP and a deployment must provide before claiming that a person can observe and end each grant (Section 6);¶
per-action oversight at a resource, within the authority of the access token (Section 7).¶
Section 8 describes how Model Context Protocol servers realize these modes; that section is informative.¶
An agent acting for Alice asks for authority that policy says Alice must approve. The client opts in to deferral, and the IdP holds the request until Alice decides.¶
Client IdP Alice RAS | | | | | (1) exchange, completion_mode=deferred, DPoP K | |------------->| | | | (2) authorization_pending, deferral_code | |<-------------| | | | | (3) approval request (agent, user, | | client, target, authority) | | |---------------->| | | |<----------------| | | (4) poll with deferral_code, DPoP K | |------------->| | | | (5) ID-JAG for the approved authority, cnf K | |<-------------| | | | (6) redeem as any governed grant | |-------------------------------------------------->|
The client sends a governed token exchange request with
completion_mode=deferred and a DPoP proof (Section 4.1).¶
The IdP completes every issuance check except Alice's decision, records the pending request, and returns a deferred response (Section 4.2).¶
Alice authenticates and approves the request, or a narrower one, through a channel this document does not define (Section 4.3).¶
The client polls with the deferral code, proving the same key.¶
The IdP re-checks the request and issues the governed grant the request would have produced, for the approved authority and bound to the same key (Section 4.4).¶
The RAS processes the grant as any governed grant under [FEDERATION].¶
This document covers governed grant issuance at the IdP, including continuation ([CONTINUATION]), governed grant redemption at the RAS, and oversight of individual actions at an API. It does not cover:¶
approval of a task, which Mission-Bound Authorization addresses ([MISSION-APPROVAL]);¶
multi-party approval or the provenance of an approver's authority;¶
the approval channel or its user interface;¶
the format or transport of notices to overseers;¶
completion of an approved access request as a token under [AROP] at the IdP (Appendix C); or¶
continuation from an authorization whose redemption was deferred, beyond making that authorization ineligible for it (Section 5.6, Appendix C).¶
This document defines no new token format, claim, error code, grant type, or request parameter.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Agent Principal, Identity Binding, Client Association, acting relationship, Delegation Authorization, Agent Authorization, Governance Tenant, Target Tenant, actor gate, and resource authorization server (RAS) follow [FEDERATION]. ID-JAG and WAG [WAG] refer to the grants as [FEDERATION] profiles them. Deferral code, deferred response, completion mode, and originating grant follow [DTR]. Local Suspension and grant-derived revocation follow [AGENT-LIFECYCLE].¶
This document defines these terms:¶
The policy that determines whether a person decides on a governed request before a grant issues or an action executes (human in the loop), may observe and end what was issued (human on the loop), or is not involved per request (human out of the loop) (Section 3).¶
A person who decides on a pending governed request, a pending governed redemption, or a held action, acting within authority over it that the person held before the request. An agent, a client, a policy engine, or another automated system is not an approver.¶
A person who can observe grants issued under supervised issuance and can intervene (Section 6).¶
For a governed token exchange request, the resolved Agent Principal; for delegated access, the resolved user; the authenticated client and its registration at the target RAS; the acting relationship; the Governance and Target Tenants; the RAS, resource, and requested authority (scope and any authorization details); for a continuation, the chain's root client, in whose context the onward grant is authorized ("Validation" in [CONTINUATION]), and, separately, the continuing client; and the request's proof key.¶
IdP state for a governed token exchange request that passed every check of [FEDERATION] except an approver's decision. It holds the request's governed request context and is not a credential.¶
RAS state for the redemption of a governed grant that passed every check of [FEDERATION] except an approver's decision. It holds the values those checks established (Section 5.2) and is not a credential.¶
An action that ends or narrows authority already issued: grant-derived revocation, withdrawing or narrowing a Delegation or Agent Authorization, a Local Suspension, or disabling the agent.¶
The documented maximum time from an intervention until the affected target stops accepting the authority it ends, including propagation, caching, and the lifetime of tokens accepted without a check.¶
| Mode | Who decides, and when | Issuance or execution waits for | Defined in |
|---|---|---|---|
| Human in the loop | An approver, before the grant issues or the action executes, on its governed request context or the action | The approver's decision | Section 4, Section 5, Section 7 |
| Human on the loop | No one before issuance; an overseer can observe each grant and intervene | Nothing | Section 6 |
| Human out of the loop | No one per request; standing authorization applies | Nothing | [FEDERATION] |
These rules apply to every mode:¶
Policy selects the mode. The IdP determines the mode for a governed request from trusted policy for the resolved agent, acting relationship, user, client, target, and requested authority, usually as a condition of the Delegation or Agent Authorization. For a continuation, the client is the chain's root client, so the same policy applies to a continuation as to the direct request; the RAS determines it for a redemption from its own policy. A request parameter or the client's opt-in to deferral MUST NOT select a mode or lower one that policy requires.¶
Each decision point applies its own mode. IdP issuance, IdP continuation, RAS redemption, and the API's decision on an action each apply the mode their policy requires. Oversight at one point does not satisfy another: a resource domain that requires a person to decide on an action applies its own human-in-the-loop decision at the action (Section 7), as the RAS decides anew under [FEDERATION].¶
Only a person approves. A decision by a supervising agent, a policy engine, or a risk service can be a condition of issuance, but a request decided that way is not human in the loop.¶
An approval is not standing authority. An approval covers the one request or action it was made on. Making it standing authority is a change to the Delegation or Agent Authorization, made by a principal authorized to make that change; requests within the changed authorization are then human out of the loop.¶
Human out of the loop is the behavior of [FEDERATION]; this document adds no requirement for it.¶
In the terms of [OVERSIGHT-ACTS], a human-in-the-loop approval is a release: the approver permits a specified request within authority held beforehand, and the release establishes that the request was permitted, not that it was correct. A notice under supervised issuance supports an observation, and an intervention is a decision. This document does not define how such acts are recorded.¶
This section profiles [DTR] for governed token exchange requests at the IdP: ID-JAG and WAG requests under [FEDERATION], and continuation requests under [CONTINUATION]. A pending governed request moves through these steps, which the subsections define:¶
| Event | IdP action | Result |
|---|---|---|
| Request with the opt-in | Completes every check except the approver's decision; for a continuation, reserves the assertion (Section 4.2, Section 4.5) | Pending; a deferred response of Section 6.4 of [DTR]: authorization_pending, or interaction_required with an interaction_uri
|
| Poll before a decision | Verifies the client and its key | A pending code of Section 6.6 of [DTR]: authorization_pending, interaction_pending, or interaction_required with an interaction_uri; or slow_down
|
| Approver decides | Records the decision for this request only (Section 4.3) | Pending until the next poll |
| Poll after approval | Re-checks the request; for a continuation, counts the grant against the limits as it issues (Section 4.4) | Grant; reservation ISSUED |
| Poll after denial, or a re-check fails | Issues nothing |
access_denied; reservation FAILED |
| Client revokes the deferral code (Section 8 of [DTR]) | Ends the request |
access_denied; reservation FAILED |
expires_in elapses |
Issues nothing |
expired_token; reservation FAILED |
Reservation states apply to a deferred continuation at an IdP that offers idempotent retry (Section 4.5). A pending request holds no limit capacity and no grant, so its end releases nothing else.¶
A client that can wait for an approver includes deferred in the
completion_mode parameter of its token exchange request
(Section 5.1 of [DTR]). It MUST present a DPoP proof [RFC9449] on
that request, whatever its client authentication method. This narrows
Section 11.1 of [DTR], which lets a confidential client using
private_key_jwt omit DPoP: under this document the deferral code and
the grant it yields are bound to one key.¶
When policy requires human in the loop and the request does not include
deferred, the IdP MUST NOT return a deferred response
(Section 5.3 of [DTR]) and MUST NOT issue the grant. It rejects the
request (Section 5.2 of [RFC6749]) with actor_unauthorized for
delegated root issuance, and with invalid_target for self-acting root
issuance and for any continuation. These are the errors [FEDERATION]
assigns when approval requires a condition the selected composition
cannot enforce ("Issuance Authorization" in [FEDERATION]), and, for a
continuation, the code [CONTINUATION] uses for a target the chain's
authorization does not permit, since a continuation uses the error
codes of [ICA] ("Errors" in [CONTINUATION]); this document reuses
them for an approval that the request did not let the IdP obtain. This document defines no discovery
of a target's oversight mode; a client learns to opt in from
configuration. A
client that can wait for an approver and handle a deferred response can
include deferred on every request that policy might hold, since the
IdP answers synchronously when it does not defer. A refusal of such a
request is not a missing opt-in, and the client does not retry it
unchanged.¶
Before returning a deferred response, the IdP MUST complete every check that [FEDERATION] requires for the request except the approver's decision: client authentication, agent resolution, the Client Association, subject validation and resolution, the Delegation or Agent Authorization, target and tenant resolution, and the client registration association. A request that fails a check is rejected as [FEDERATION] specifies and is not deferred. An approver therefore never decides on a request the IdP would refuse.¶
The IdP then records a pending governed request holding the request's
governed request context, and returns the deferred response of
Section 6.4 of [DTR]. The deferral code represents that pending
governed request and nothing else. The IdP MUST bind it to the
authenticated client and to the key of the request's DPoP proof, and
MUST reject a poll or cancellation that does not prove that key
(Section 11.1 of [DTR]). The IdP MUST set expires_in no greater than
a configured maximum pending lifetime for the applicable policy.¶
The client does not present the subject token or the agent-resolution
input again; the IdP validates them when it receives the request. The
lifetime limits of [FEDERATION] still bound the grant issued at
resolution: an ID-JAG does not outlive its subject credential ("Grant
Issuance" in [FEDERATION]), and no grant outlives an agent-resolution
input that bounds it, such as a platform JWT ("Common Grant Claims,
Lifetime, and Response" in [FEDERATION]). For root issuance, the IdP
MUST set expires_in so that the pending governed request ends no
later than the earliest of those expirations. An approval late in the
window therefore yields a shorter grant. A deployment that needs a
longer window uses a subject credential that expires later, such as a
refresh token.¶
The IdP MUST present a pending governed request only to approvers that policy designates for it, and MUST authenticate an approver at the strength that policy requires. For delegated access, an approver is the user or a person whom policy authorizes to decide for that user and target. For self-acting access, an approver is a person policy designates, such as the agent's accountable owner. The IdP MUST NOT accept a decision from the requesting client, the agent, or another agent.¶
The IdP MUST show the approver the governed request context: the agent, the user for delegated access, the client, the target RAS and resource, the requested authority, and, for a continuation, the continuing client. For a continuation, it MUST also show any restrictions of the chain authorization and the Continuation Association that apply to the requested target ("Restrictions" in [CONTINUATION]); an approval does not change them. Text that the client or agent supplies, such as a stated reason, MUST be shown as supplied by the requester and MUST NOT replace or restate the governed request context.¶
An approver can approve the request as shown, approve a narrower
authority, or deny it. An approval MUST NOT widen the governed request
context: a different agent, user, client, target, resource, or acting
relationship, or broader authority, needs a new request. An approval of
narrower authority yields a grant with that authority, as [RFC8693]
and "Issuance Authorization" in [FEDERATION] permit, and the token
response's scope reports it.¶
An approval covers only the pending governed request it was made on. The IdP MUST NOT apply it to another request, including a later request with the same governed request context.¶
An approver can condition an approval on time. The IdP enforces such a condition only on the grant it issues. It MUST NOT treat a condition on downstream access as enforced, since [FEDERATION] defines no portable deadline on authorization a RAS issues and rejects issuance whose approval requires a downstream condition the composition cannot enforce.¶
This document does not define the approval channel. [CIBA], with a
binding_message that describes the request, is one way to reach the
user; an access request service under [ARAP] is another. A third is
the interaction_uri that a deferred or polling response can carry
(Section 6.4 of [DTR]), as in the agent example of
Appendix A.6 of [DTR]. The page it identifies shows the governed
request context, and the approver authenticates there, after the
request was created, at the strength policy requires. Reaching the URI is not that authentication, and
neither is a session in a browser the agent operates, through which
the agent could approve its own request (Section 10.3). Because
the requesting client receives the URI, the IdP MUST NOT accept a
decision made through it unless the approver authenticated there after
the pending request was created; an existing session does not satisfy
this. Where another server authenticates the approver, the IdP requests
fresh authentication and checks that the reported authentication time
is later than the request's creation. The
channel rarely fits self-acting access, whose approver is seldom the
client's user. A client that can present the URI to the user includes
deferred_interactive with deferred (Section 5.1 of [DTR]).¶
Before issuing a grant in response to a poll, the IdP MUST re-evaluate the request under Section 11.7 of [DTR] and, in addition, MUST confirm that:¶
the Agent Principal is active;¶
for root issuance, the Identity Binding and Client Association used still permit the request;¶
the Delegation or Agent Authorization still permits the target and the approved authority;¶
for delegated access, the user is active and resolves as before;¶
for a continuation, neither the presented hop nor an ancestor is revoked, the chain has not ended, a Continuation Association still permits the continuing client, the target, and the approved authority, and the continuation is within the limits of Section 6.3 of [ICA] (Section 4.5); and¶
no change applied within the IdP's freshness limit ("Issuance Authorization" in [FEDERATION]) withdraws any of these.¶
If any check fails, the IdP returns access_denied and issues no grant,
as Section 11.7 of [DTR] requires. A check that cannot be completed,
because state it depends on is unavailable, has not failed: the IdP
MUST NOT resolve the request on that basis, and answers the poll with a
pending response (Section 6.6 of [DTR]) until it can complete the
check or the request expires, as [CONTINUATION] answers a
continuation exchange it cannot confirm with HTTP 503 rather than
ending the chain. A denial resolves to
access_denied, and a pending request that outlives expires_in
resolves to expired_token (Section 6.6 of [DTR]). A client cancels
a pending request by revoking its deferral code (Section 8 of [DTR],
[RFC7009]).¶
On success, the IdP MUST issue the governed grant that the request would have produced without deferral, with the approved authority:¶
the same Agent Principal, acting relationship, and, for delegated access, user;¶
the same client registration at the RAS as client_id, target, and
resource;¶
cnf.jkt equal to the thumbprint of the request's proof key; and¶
iat and exp set when the grant issues, so that the grant's
redemption window begins at resolution, within the lifetime limits of
[FEDERATION] (Section 4.2).¶
The successful polling response carries the issued_token_type of the
originating request (Section 6.5.2 of [DTR]). No claim in the grant
indicates that an approval occurred. The IdP MAY include the txn
claim [RFC8417] with an identifier of the approval, for audit
correlation; a RAS or API MUST NOT treat txn as evidence of approval
or as authority.¶
A client whose pending request is denied or expires MUST NOT retry it as self-acting access, under another client, or under a lower adoption profile. A later request for the same authority is a new request, and a new approval if policy requires one.¶
A continuation exchange ([CONTINUATION]) can be deferred under this section, with the continuing client as the client. Before deferring, the IdP performs every validation step of the continuation exchange, including the Continuation Association and the limits of [ICA], and reserves the assertion as Section 5.5.7 of [ICA] requires. The pending governed request holds that reservation:¶
Retention. The IdP MUST retain the reservation until the later of the request's end and the time Section 5.5.7 of [ICA] requires.¶
States. Where the IdP offers idempotent retry, this document
replaces one transition of Section 5.5.7.1 of [ICA] for a deferred
continuation: the reservation stays RESERVED while the request is
pending, rather than becoming FAILED at the assertion's exp plus
the permitted clock skew. It becomes ISSUED when the onward grant
issues and FAILED when the request ends otherwise, on denial,
cancellation, expiry, or a failed re-check.¶
Retries. The IdP MUST reject a second presentation of the assertion, both while the request is pending and after it ends. Recovery (Section 5.5.7.1 of [ICA]) does not apply to an onward grant issued at resolution, which only the polling response delivers (Section 6.5.2 of [DTR]).¶
A continuation exchange performs no agent resolution, so at resolution
the IdP re-checks the chain and the continuing client's Continuation
Association rather than an Identity Binding (Section 4.4). The
continuation window is evaluated when the request is received: it
bounds when a continuation can be requested, and the maximum pending
lifetime bounds how long after that the onward grant can issue. A chain
that ended while the request was pending resolves to access_denied;
the continuing client learns of the ending from its next continuation,
which fails with invalid_continuation. While the request is pending,
the continuing client reports the wait to its own caller through its
own interface, such as an MCP task (Section 8).¶
The limits of Section 6.3 of [ICA] count continuations that have
issued, not requests, so passing them at deferral reserves no capacity.
At resolution, the IdP MUST evaluate them again against the
continuations issued by then, and MUST count the onward grant against
them atomically with issuing it, so that continuations pending together
cannot exceed a limit. A request that would exceed a limit resolves to
access_denied.¶
This section profiles [DTR] for the redemption of a governed grant at the RAS: an ID-JAG or a WAG under "Grant Redemption at the RAS" in [FEDERATION], whether a root grant or an onward grant under [CONTINUATION]. The RAS holds the redemption until an approver decides, then issues what the redemption would have produced. This section covers deferral for an approver's decision only; deferral for another reason, such as a fraud review, is outside this document.¶
The approval is the RAS's own. It bounds only what the RAS issues, an approval at the IdP does not satisfy it (Section 3), and it authorizes nothing at another server (Section 5.6). A pending governed redemption moves through these steps, which the subsections define:¶
| Event | RAS action | Result |
|---|---|---|
| Redemption with the opt-in | Completes every check except the approver's decision, accepts the grant, and opens one approval request (Section 5.2) | Pending; a deferred response of Section 6.4 of [DTR]: authorization_pending, or interaction_required with an interaction_uri
|
| The same redemption again | Matches the accepted grant (Section 5.4) | The same deferral code |
| Poll before a decision | Verifies the client and its key | A pending code of Section 6.6 of [DTR]: authorization_pending, interaction_pending, or interaction_required with an interaction_uri; or slow_down
|
| Approver decides | Records the decision for this pending redemption only (Section 5.3) | Pending until the next poll |
| Poll after approval | Re-checks the redemption with the approval (Section 5.5) | Access token, and any refresh token |
| Poll after denial, or a re-check fails | Issues nothing |
access_denied
|
| Client revokes the deferral code (Section 8 of [DTR]) | Ends the pending redemption |
access_denied
|
expires_in elapses |
Issues nothing |
expired_token
|
A client that can wait for an approver includes deferred in the
completion_mode parameter of its redemption request
(Section 5.1 of [DTR]). It MUST present a DPoP proof [RFC9449] on
that request, whatever its client authentication method, as for
deferred issuance (Section 4.1). For a grant that contains cnf.jkt,
that proof is the grant proof.¶
The RAS MUST NOT return a deferred response to a redemption request
that does not include deferred or does not present a DPoP proof. It
MUST NOT defer a redemption for a resource whose configuration selects
mutual-TLS access tokens ("Access-Token Protection" in
[FEDERATION]): Section 11.1 of [DTR] requires the token issued
after a request with a DPoP proof to be bound to that proof's key, and
that configuration applies mutual TLS regardless of any DPoP proof.¶
When RAS policy requires approval and the RAS does not defer, it MUST NOT issue a token. It rejects the redemption with the error it returns
when its own policy refuses a redemption ("Redemption Errors" in
[FEDERATION]): access_denied for an ID-JAG and
invalid_target for a WAG. The response therefore does not reveal
that an approval could be obtained. A client that can wait and handle a
deferred response can include deferred on every redemption that RAS
policy might hold, as at the IdP (Section 4.1). A RAS that defers redemptions
advertises deferred_token_response_supported in its own metadata
(Section 5.1 of [DTR]); the IdP's metadata says nothing about the
RAS.¶
Before returning a deferred response, the RAS MUST complete every check that [FEDERATION] requires for the redemption except the approver's decision:¶
Both grants: the proof and client, replay, and authority checks of "Common Grant Validation" in [FEDERATION], and the effective eligibility of the agent and, for an ID-JAG, the user, including any Local Suspension ([AGENT-LIFECYCLE]).¶
ID-JAG: ID-JAG validation, including the grant's time claims; the
actor; user resolution; correlation of the act agent; and the actor
gate ("Grant Validation" in [FEDERATION]).¶
WAG: validation of the grant, including its time claims and
typ; correlation of (iss, sub) to one local agent principal; and
RAS policy for the agent ("Self-Acting Redemption: WAG" in
[FEDERATION]).¶
A redemption that fails a check is rejected as [FEDERATION] specifies
and is not deferred. The client does not present the grant again, so
its time claims are checked when the request is received; the grant's
exp limits redemption, not later access ("Authorization Lifetime" in
[FEDERATION]). This document thus reads the originating-grant
preconditions that Section 11.7 of [DTR] re-evaluates as excluding
the grant's own expiration (Appendix C). Approval can therefore
come after the grant's exp. The access token then issued has iat
set at resolution, and both RAS lifetime policy ("Authorization
Lifetime" in [FEDERATION]) and the deadlines of
Section 5.5 apply to its expiration: the approval expiry,
any enforcement deadline, and the absolute authorization expiration.
This departs from the recommendation of Section 4.1 of [RFC7521],
which Section 5 of [WAG] repeats and [FEDERATION] keeps for
direct redemption, that an access token not outlive the assertion's
validity by a significant period. For a deferred redemption, those
deadlines bound the access token's expiration instead, and the maximum
pending lifetime bounds only how long after receipt the token can
issue.¶
The RAS then accepts the grant. It MUST record the grant's (iss,
jti) as accepted, whether or not the grant is bound, and MUST NOT
accept the grant again for another redemption. This narrows the
re-acceptance of a bound grant that "Common Grant Validation" in
[FEDERATION] permits and the parallel request of
Section 9.3 of [DTR]: one grant yields one outcome, and a denial
cannot be bypassed by presenting the grant again. The RAS retains the
record until the later of the pending redemption's end and the
retention of "Time, Replay, and Key Validation" in [FEDERATION].¶
On acceptance, the RAS MUST set the absolute authorization expiration
of "Optional RAS Refresh Tokens" in [FEDERATION], whether or not it
later issues a refresh token, and MUST NOT issue a token for the
redemption that outlives it. That section sets the expiration at
issuance. Without deferral the two coincide; with deferral, a later
start would extend reliance on one IdP decision by the pending time.
Where the RAS already set an absolute authorization expiration for the
grant, that expiration applies, and deferral does not extend it. If it
has passed, the RAS does not defer: access beyond it requires a new
grant, and the RAS rejects the redemption with invalid_grant.¶
The RAS records a pending governed redemption bound to the values that the checks established:¶
the authenticated client, the Target Tenant, the resource, and the
requested authority, including any authorization_details as
processed;¶
the proof key and the absolute authorization expiration;¶
for an ID-JAG, the resolved local user, the local agent principal for
act, the validated act object, and, where the RAS participates in
grant-derived revocation ([AGENT-LIFECYCLE]), the revocation key;¶
for a WAG, the local agent principal correlated from (iss, sub);
and¶
the grant as received, or a digest of it (Section 5.4).¶
The RAS MUST construct any authorization evaluation for the pending
governed redemption only from these values, keeping the user, the
agent, and the client distinct, as "Optional Policy Services" in
[FEDERATION] requires of an API. For an ID-JAG, the agent is the
issuer-qualified act; for a WAG, the agent is the subject. The client
identifier never identifies the agent.¶
The RAS returns the deferred response of Section 6.4 of [DTR]. It
MUST bind the deferral code to the authenticated client and the key of
the request's DPoP proof, and MUST reject a poll or cancellation that
does not prove that key (Section 11.1 of [DTR]). It MUST set
expires_in no greater than a configured maximum pending lifetime and
so that the pending governed redemption ends no later than the absolute
authorization expiration. An approval after that expiration therefore
finds an expired request.¶
The rules of Section 4.3 apply with the RAS in place of the IdP and the values of Section 5.2 as the governed request context: approvers designated by RAS policy and authenticated at the strength it requires, never the client or an agent; the resolved values shown, with requester text shown as the requester's; approval of the request as shown or of narrower authority, never of a wider one; and time conditions enforced only on what the RAS issues.¶
The RAS MUST bind each approval to one pending governed redemption:¶
One approval request. The RAS opens one approval request for each pending governed redemption. It MUST NOT use one approval request for two pending governed redemptions, including by treating a redemption with the same client and requested authority as a duplicate of another.¶
Only its own approval. The RAS MUST accept an approval only for the approval request it opened for that pending governed redemption, received over an authenticated channel or verified for integrity, issuer, intended recipient, expiry, and binding. An approval for another approval request completes nothing: the pending governed redemption remains pending until its own approval, denial, or expiry.¶
Kept unchanged. The RAS MUST keep the approval as received, including its identifier, its time values, and any state that the approval channel attaches, or a reference that retrieves it exactly. It MUST use that approval unchanged in every later evaluation. A shorter deadline that a later evaluation returns is kept separately, as an enforcement deadline, and does not modify the approval.¶
The approval expiry is the latest time at which the approval channel states the approval remains valid.¶
[ARAP] and [AROP] realize these rules. The approval request is an
ARAP access request, the approval is ARAP's approval object, which
ARAP carries unchanged into re-evaluation, the approval expiry is its
approved_until, and completion is AROP's token issuance completion.
AROP's idempotent submission compares the client and the requested
authority but not the agent or the user; Section 5.4
replaces it.¶
A pending governed redemption is recoverable until a successful token response redeems its deferral code (Section 6.5.2 of [DTR]), or until it is denied, cancelled, or expires. The RAS cannot know whether a token response reached the client; a later poll for a redeemed code fails (Section 6.5.1 of [DTR]).¶
While a pending governed redemption is recoverable, the RAS MUST return
its deferral code, with the remaining expires_in, to a redemption
request that presents:¶
the accepted grant, byte for byte, matched against the stored grant or its digest;¶
authentication of the same client and a DPoP proof of the same key, each fresh under its own replay rules;¶
deferred in completion_mode; and¶
the same grant_type, resource, scope, and authorization_details.¶
Recovery returns the deferred response of Section 6.4 of [DTR]. An
interaction_uri that it carries, or that a later poll returns,
identifies the same approval request.¶
Recovery matches the stored grant and does not validate it again, so it
succeeds after the grant's exp. It is not an acceptance, opens no
approval request, and changes neither the maximum pending lifetime, the
absolute authorization expiration, nor the approval expiry. The RAS
MUST record an acceptance and its pending governed redemption
atomically, so that identical requests received together create one
pending governed redemption and one approval request. Recovery issues
no token, so it cannot yield a second token while a poll succeeds.¶
The RAS rejects any other presentation of an accepted grant under the
replay rule of Section 5.2, with invalid_grant. This
includes a presentation without deferred or with another grant type,
and any presentation after the pending governed redemption ends.¶
Only an approval accepted under Section 5.3 starts resolution; an approval for another approval request leaves the pending governed redemption pending. Before issuing a token in response to a poll, the RAS MUST re-evaluate the redemption under Section 11.7 of [DTR], with the approval kept under Section 5.3, and MUST confirm that:¶
neither the approval's expiry nor any enforcement deadline has passed;¶
the RAS still trusts the grant's issuer for the Target Tenant, in the
grant's tenant at a multi-tenant issuer ("Canonical Identity and
Tenant Boundaries" in [FEDERATION]);¶
no applied disablement, correlation removal, local restriction, or Local Suspension affects the agent or, for an ID-JAG, the user ("Applied Disablement and Revocation" in [FEDERATION], [AGENT-LIFECYCLE]);¶
for an ID-JAG, the user is active and resolves to the same local
user, the act agent correlates to the same local agent principal,
and the actor gate permits the relationship. An account-link change
does not substitute another user ("User Resolution and Linking" in
[FEDERATION]), and a changed agent link does not transfer the
delegation ("Agent Principal Correlation" in [FEDERATION]);¶
for a WAG, (iss, sub) correlates to the same local agent
principal; and¶
current RAS policy permits the approved authority for the client, Target Tenant, and resource.¶
If any check fails, the RAS returns access_denied and issues no
token, as Section 11.7 of [DTR] requires. As at the IdP
(Section 4.4), a check that cannot be completed has not failed: the
RAS MUST NOT resolve the redemption on that basis, and answers the poll
with a pending response until it can complete the check or the pending
governed redemption expires. A denial resolves to
access_denied, and a pending governed redemption that outlives
expires_in resolves to expired_token (Section 6.6 of [DTR]).
Grant-derived revocation of the grant reaches "all redemptions" of it
([AGENT-LIFECYCLE]), so a participating RAS ends the pending governed
redemption when the event arrives, and the next poll gets
access_denied. Other changes made at the IdP after receipt reach the
RAS only through such signals or provisioning. The maximum pending
lifetime bounds the rest, and an intervention bound (Section 6)
counts it.¶
On success, the RAS MUST issue what the redemption would have produced without deferral, for the approved authority:¶
the identities bound at receipt: for an ID-JAG, the local user as
subject and act unchanged ("Actor Preservation" in
[FEDERATION]); for a WAG, the local agent principal as subject and
no act;¶
an access token bound to the proof key (Section 11.1 of [DTR]),
with iat set at resolution and an expiration no later than the
approval expiry, any enforcement deadline, and the absolute
authorization expiration; and¶
the approved authority, which a narrower approval reduces; the
response's scope reports it.¶
The successful polling response is the token response that the
redemption would have returned (Section 6.5.2 of [DTR]); neither JWT
grant type, jwt-bearer or jwt-dpop, defines an issued_token_type.
The access token MAY carry txn for audit
correlation, as a grant may (Section 4.4); an API MUST NOT treat it
as evidence of approval or as authority.¶
A WAG redemption yields no refresh token ("Self-Acting Redemption: WAG"
in [FEDERATION]), and an approval of a single use SHOULD NOT yield
one. Otherwise, a refresh token for a deferred redemption follows
"Optional RAS Refresh Tokens" in [FEDERATION], with the absolute
authorization expiration set on acceptance (Section 5.2).
The RAS MUST keep the approval with the refresh authorization. On every
refresh, in addition to that section's processing, the RAS MUST
evaluate the request again with the kept approval. It MUST reject the
refresh with invalid_grant if the approval has expired or was
revoked, cancelled, or superseded, if an enforcement deadline has
passed, or if the evaluation denies. A shorter deadline that an
evaluation returns becomes the enforcement deadline for every later
token and for the refresh authorization. An access token issued on
refresh expires no later than the approval expiry, any enforcement
deadline, and the absolute authorization expiration. When the RAS
rejects a refresh after authenticating the client and its proof, under
this paragraph or under "Optional RAS Refresh Tokens" in
[FEDERATION], it MUST end the refresh authorization, so that a later
change in policy or approval does not revive it. A request that fails
client authentication or proof does not end it. Access after an ended
refresh authorization needs a new grant, since this one is consumed.¶
The RAS MUST NOT record an authorization from a deferred redemption as eligible for continuation ("Root Redemption at the Gateway's RAS" in [CONTINUATION]). This covers every access token issued for that authorization, including on refresh, and the deferred redemption of an onward grant as well as of a root grant. A CAI therefore refuses to attest such a token, as for any ineligible hop. Under [AROP], the approval expiry also bounds tokens obtained by exchange. Continuation exchanges the access token at the CAI and the resulting assertion at the IdP, which issues an onward grant this document cannot bound (Appendix C).¶
Under supervised issuance, the IdP issues governed grants without waiting, and a person can observe and end each one. An IdP claims supervised issuance for a target only where both hold:¶
Each grant is visible. For each grant it issues under a
supervised policy, the IdP makes the grant's iss and jti, its
governed request context, and its issuance time available to the
overseers that policy designates, no later than it returns the grant.
This document does not define the channel or its format.¶
Each grant can be ended. At least one intervention with a defined effect reaches the target, with a documented intervention bound:¶
grant-derived revocation of an ID-JAG where the target participates ([AGENT-LIFECYCLE]);¶
withdrawing or narrowing the Delegation or Agent Authorization, which stops new grants and ends or narrows continuation ([CONTINUATION]);¶
for a grant that can be continued, the IdP's revocation of its chain or of the grant's subtree, which stops new continuations, including from descendants accepted at other targets that revocation at one target does not reach (Section 6.2 of [ICA]);¶
a Local Suspension at the target; or¶
disabling the agent, once the target applies it.¶
Revoking one WAG is deployment-specific ([AGENT-LIFECYCLE]), so supervised self-acting issuance rests on the other interventions.¶
The intervention bound includes what an intervention leaves usable: grants issued and not yet redeemed, the tokens a later redemption obtains, tokens already accepted, and any refresh authorization a RAS issued. Revoking a chain, for example, leaves an ID-JAG already issued redeemable for its own lifetime (Section 6.2 of [ICA]). An API that validates access tokens without a check accepts them until they expire, and no intervention reverses an operation already performed. A deployment that cannot document an intervention bound for a target does not claim supervised issuance for it.¶
Resource policy can require a person to decide on an action, such as a tool call, before it executes. The API holds the action, or refuses it in a way that lets the agent request it, until an approver decides; the API then executes it only after a new decision on the same action. This oversight applies within the access token's authority:¶
The approval binds to the action. It covers the operation, its
target object, and its arguments, and the access token's subject,
agent, client, and tenant. The agent is the validated act for a
delegated token, and the subject for a token that trusted context
establishes as self-acting ("Profile Applicability" in
[FEDERATION]). A changed action needs a new decision.¶
Policy selects the mode. A tool's declared hint, such as an MCP tool annotation, MUST NOT select or lower the mode that resource policy requires for an action (Section 8).¶
The approver is a person. Resource policy designates approvers as in Section 4.3, and the API MUST NOT accept a decision from the client, the agent, or another agent as an approval. Where the API reaches the approver through a URI that the client receives, such as an MCP URL-mode elicitation (Section 8), the API MUST NOT accept a decision made through it unless the approver authenticated there after the action was held; an existing session does not satisfy this, as at the IdP (Section 4.3).¶
The approval does not add authority. It satisfies an additional condition within the token's authority and cannot expand it ("External Approval" in [FEDERATION]). An action outside that authority needs a new governed grant, which the client requests by token exchange and the IdP can defer under Section 4.¶
A confirmation is not an approval unless it is bound. A confirmation the client shows in its own interface is not an approval under this document. It becomes one only where the API authenticates the person, binds the decision as above, and makes the decision itself, consistent with Section 10.8 of [AIMS].¶
This section is informative. An MCP server is the enforcement point for each tool call it serves. It realizes the modes as follows.¶
Holding a call. A server that requires a person to decide on a
call holds it as a task under the MCP tasks extension
[MCP-TASKS], which the client declares on the request, reporting
working or input_required until the approver decides.
[MCP-SEP-2848] proposes a
standard extension in which a requestable denial returns a task that
stays working while the approval resolves out of band, with an
access request service under [ARAP] behind it.¶
Reaching the user. URL-mode elicitation can take the user to an approval page while the user is present. [MCP] requires the server to bind the elicitation to the user identified by its authorization and states that the elicitation response does not authorize. Under this document, the decision is made on the approval page by an authenticated approver and feeds the server's decision (Section 7). A self-acting token has no user to elicit from.¶
Asking for more authority. A call outside the token's authority
can be refused with an insufficient_scope challenge. The client then
requests a new governed grant by token exchange, which the IdP can
defer (Section 4). [MCP-SEP-2643] proposes structured
denials that can describe this remediation.¶
Tool annotations. [MCP] defines tool annotations, such as
destructiveHint, as hints that clients treat as untrusted unless the
server is trusted. They do not select or lower a mode
(Section 3); a deployment can use its own classification of tools to
require a stricter one.¶
Client confirmations. [MCP] recommends that a person be able to deny tool calls and sampling requests in the client. Such a confirmation is client behavior, not an approval under this document (Section 7).¶
Each claim below is optional and names the role that makes it:¶
| Role | Claim | Requirements |
|---|---|---|
| IdP | Deferred governed issuance | Section 4, except Section 4.5 |
| IdP | Deferred continuation | Section 4.5, with an IdP continuation claim under [CONTINUATION] |
| IdP | Supervised issuance, per target | Section 6 |
| RAS | Deferred redemption | Section 5 |
| Client | Deferred governed issuance | Section 4.1; polling with the same key under [DTR]; the no-retry rule of Section 4.4 |
| Client | Deferred redemption | Section 5.1; polling with the same key under [DTR]; recovery only as Section 5.4 defines |
| API | Per-action oversight | Section 7 |
A claim of deferred governed issuance or deferred redemption requires the polling mode of [DTR]; callback notification (Section 7 of [DTR]) is optional. Each claim requires the realization of [FEDERATION] it applies to.¶
An approver asked too often approves without reading. Policy that places routine requests under human in the loop trains approvers to approve. Deployments can reserve approval for requests whose authority warrants it, grant routine authority as standing authorization that a person reviews periodically, and limit how many pending requests one agent can hold. Converting an approval into standing authority is an authorization change (Section 3), not a side effect of approving.¶
A limit on pending requests does not stop sequential prompting. After a denial, a later request for the same authority is a new request (Section 4.4), so an agent, or content that misleads it, can prompt an approver again as soon as the previous request ends, until the approver accepts. This document does not define suppression of a request that matches one recently denied: doing so needs a definition of equivalent requests, a way for a policy change or an authorized reconsideration to clear it, a party that owns the limit, and the refusal it returns. Approval channels and policy can rate-limit prompts per agent and approver in the meantime.¶
An agent can phrase a request to mislead an approver. The governed request context comes from the IdP's resolution, not from the request, and the requester's own text is shown as the requester's (Section 4.3). An approver can still be misled about why the authority is needed; this document makes the request accurate, not the reason.¶
An agent that could approve its own requests would remove the person the
mode requires. An approver is a person designated by policy, and neither
the requesting agent, its client, nor another agent can approve
(Section 4.3, Section 7). How an IdP or API tells a person's
decision from an automated one depends on the approval channel, which
this document does not define; the channel's authentication of the
approver is what makes the rule enforceable. An interaction_uri opened
in a browser the agent operates is the plainest case: the page must
authenticate the approver itself, after the request was created, so
that a session already in that browser cannot decide (Section 4.3). A deployment that
routes decisions to an automated approver is human out of the loop and
records it as such (Section 3).¶
A decision can come long after the request. The IdP re-checks the agent, its bindings and associations, its authorization, the user, and the chain at resolution (Section 4.4), and the grant's lifetime starts then. The maximum pending lifetime, and for root issuance the expiration of the credentials the request presented (Section 4.2), bound how old a request can be when it is approved. At the RAS, the re-checks of Section 5.5 and an absolute authorization expiration set when the grant is accepted (Section 5.2) do the same.¶
A stolen deferral code could otherwise yield the grant after approval. The code is bound to the client and to a DPoP key (Section 4.2, Section 5.2), as Section 11.1 of [DTR] requires for clients whose profile mandates DPoP. A grant issued after a deferred issuance carries the same key, and so does a bound grant whose redemption is deferred.¶
An unbound grant does not. Whoever first redeems a stolen unbound grant, with credentials for the client it names, chooses the key the deferral code is bound to, and the approver sees the same agent, user, client, and resource as for the legitimate request. Approval therefore does not protect an unbound grant against its first redemption ("Unbound Grant Theft" in [FEDERATION]).¶
An approval matched to a request by its attributes can complete another agent's request. [ARAP]'s comparison excludes the actor, and [AROP]'s idempotent submission compares only the client and the requested authority. The RAS opens one approval request for each pending governed redemption and accepts only that request's approval (Section 5.3), so no comparison decides which redemption an approval completes.¶
Recovery returns a deferral code only to the client that authenticates
afresh and proves the deferral's key, for the grant it presented
(Section 5.4). A party that holds the grant but not the key
gets invalid_grant, as for any consumed grant. Recovery cannot
extend a pending governed redemption or the authority that follows it.¶
A client that omits the opt-in, or retries a denied request another way, must not obtain the grant without the approval policy requires. Policy selects the mode, a request without the opt-in is refused rather than issued (Section 4.1, Section 5.1), and a denied or expired request is not retried as self-acting access, under another client, or under a lower profile (Section 4.4).¶
Under supervised issuance, an agent acts before anyone reviews the grant. What it does before an overseer intervenes, and before the intervention takes effect, cannot be undone. The intervention bound (Section 6) states that window; it does not shorten it.¶
An approver sees the agent, the user, the client, the target, and the requested authority, and an overseer sees the same for each grant. The approval channel and overseer notices therefore carry personal data and reveal patterns of an agent's work for a user. Deployments limit what approvers and overseers can see to the requests they are designated for, and follow Section 9.4 of [DTR]: progress information in a polling response carries no personal data.¶
This document has no IANA actions.¶
This non-normative walkthrough extends the dedicated-client walkthrough
of [FEDERATION]. Policy lets agent-42 read files in acme-data for
Alice without approval, and requires Alice's approval before it writes
them. The client asks for files.write.¶
The client sends the token exchange request of the [FEDERATION]
walkthrough with scope=files.write, completion_mode=deferred, and a
DPoP proof of key K. The IdP authenticates analysis-client, resolves
agent-42, checks the Client Association and Alice's Delegation
Authorization, and finds that policy requires Alice's approval for
files.write. Alice's ID Token expires in 65 minutes, so a one-hour
pending lifetime leaves a grant issued at any point in it its full
300-second lifetime. The IdP records the pending governed request and
responds:¶
Alice receives an approval request on her authenticator, sent by CIBA with this binding message:¶
agent-42 (client analysis-client) asks to write files in acme-data¶
She authenticates and approves.¶
The client polls, authenticating as in the [FEDERATION] walkthrough and proving K:¶
The IdP re-checks that agent-42 is active, its binding and
association still permit the request, Alice's Delegation Authorization
still permits files.write, and Alice is active. It issues the ID-JAG
the request would have produced, with scope files.write, sub
alice-ras, act naming agent-42, client_id analysis-api,
cnf.jkt for K, and iat at resolution. The response carries
issued_token_type urn:ietf:params:oauth:token-type:id-jag. The
client redeems it at the RAS as in the [FEDERATION] walkthrough.¶
Each case changes the walkthrough as stated; all other checks succeed.¶
| Changed condition | Checked by | Required result |
|---|---|---|
The request omits completion_mode=deferred
|
IdP | HTTP 400, actor_unauthorized; no grant and no deferred response |
| The poll proves a key other than K | IdP | HTTP 400, invalid_dpop_proof
|
agent-42 is disabled while the request is pending, and Alice then approves |
IdP | HTTP 400, access_denied at the next poll; no grant |
The request asks for files.read files.write, and Alice approves only files.read
|
IdP | A grant with scope files.read
|
| Alice denies | IdP | HTTP 400, access_denied at the next poll; no grant |
| The client polls again after receiving the grant | IdP | HTTP 400, invalid_grant
|
| A continuation ([CONTINUATION]) is deferred for Alice's approval; the request is received before the source hop's continuation deadline, and Alice approves after it | IdP | The onward grant issues at the next poll; the deadline applies when the request is received (Section 4.5) |
| A continuation requests a target or authority outside the restrictions of its chain authorization | IdP | HTTP 400, invalid_target, invalid_scope, or invalid_authorization_details as [CONTINUATION] specifies, when the request is received; no deferral and no approval |
| A continuation is within every restriction when received and is deferred; while it is pending, Alice's Delegation Authorization or the Continuation Association is narrowed to exclude its target | IdP | HTTP 400, access_denied at the next poll; no grant. The narrowing comes from current authorization, since the chain authorization's restrictions are fixed |
In this variant, the IdP issues the ID-JAG of the [FEDERATION]
walkthrough without approval, and RAS policy for acme-data requires
the tenant's data steward to approve each agent redemption for
files.read. The client redeems the grant as in the [FEDERATION]
walkthrough, adds completion_mode=deferred, and proves the key in the
grant's cnf.jkt.¶
The RAS completes the checks of "Grant Validation" in [FEDERATION]:
it resolves alice-ras to user-108, correlates agent-42, and finds
that the actor gate permits it. It accepts the grant, sets the absolute
authorization expiration eight hours ahead, records the pending
governed redemption, opens one approval request, and returns the
deferred response with expires_in 3600. The steward approves through
the RAS's access request service, with an approval expiry two hours
ahead.¶
The client polls the RAS as it polled the IdP
(Appendix A.3), proving the same key. The RAS re-checks
agent-42, user-108, the actor gate, and the approval, and issues
the access token of the [FEDERATION] walkthrough: sub user-108,
act naming agent-42, cnf.jkt for the key, and an expiration
within the approval expiry. The RAS does not record the authorization
as eligible for continuation.¶
Each case changes this variant as stated; all other checks succeed.¶
| Changed condition | Checked by | Required result |
|---|---|---|
The redemption omits completion_mode=deferred
|
RAS | HTTP 400, access_denied; no token and no deferred response |
| The resource is configured for mutual-TLS access tokens | RAS | HTTP 400, access_denied; no deferral |
| A poll proves another key | RAS | HTTP 400, invalid_dpop_proof
|
The grant's exp passes while the redemption is pending, and the steward then approves |
RAS | The access token issues at the next poll |
| The maximum pending lifetime is 24 hours, and the steward approves nine hours after receipt | RAS |
expires_in was at most eight hours; HTTP 400, expired_token; no token |
Local Suspension of agent-42 while the redemption is pending, and the steward then approves |
RAS | HTTP 400, access_denied at the next poll; no token |
While the redemption is pending, agent-42's correlation changes to another local agent principal, and the steward then approves |
RAS | HTTP 400, access_denied at the next poll; no token |
| Grant-derived revocation of the ID-JAG arrives while the redemption is pending, at a participating RAS | RAS | HTTP 400, access_denied at the next poll |
| The steward denies, and the client presents the grant again | RAS | HTTP 400, access_denied; then invalid_grant
|
While the redemption is pending, the client presents the grant without completion_mode
|
RAS | HTTP 400, invalid_grant
|
After the grant's exp, the client repeats the redemption with the same grant, grant type, key, opt-in, and parameters |
RAS | The same deferral code, with the remaining expires_in
|
| The repeated redemption reuses the DPoP proof of the first | RAS | HTTP 400, invalid_dpop_proof
|
The repeated redemption presents the grant, which contains cnf, with jwt-bearer
|
RAS | HTTP 400, invalid_grant; no deferral code |
| After a successful token response, the client repeats the redemption | RAS | HTTP 400, invalid_grant
|
| Two identical redemptions arrive together | RAS | One pending governed redemption and one approval request; both responses carry its deferral code |
While the redemption is pending, agent-43 redeems its own ID-JAG through the same client, for the same user, resource, and scope |
RAS | A separate pending governed redemption and approval request; approving the first issues nothing for it |
| The access request service returns the first redemption's approval for the second's approval request | RAS | The second stays pending (a pending code of Section 6.6 of [DTR]); no token |
| The approval expires in one hour, a refresh token issues, and the client refreshes after the approval expiry | RAS | The access token expires within the approval expiry; HTTP 400, invalid_grant on refresh |
| The approval is revoked ten minutes into its hour, and the client then refreshes | RAS | HTTP 400, invalid_grant
|
The grant had no cnf and the client's minimum was governed agent access; after a refresh token issues, the minimum becomes bound governed agent access, and the client refreshes |
RAS | HTTP 400, invalid_grant ("Optional RAS Refresh Tokens" in [FEDERATION]) |
A refresh is rejected because the actor gate no longer permits agent-42; the gate is restored, and the client refreshes again with the same refresh token |
RAS | HTTP 400, invalid_grant; the rejection ended the refresh authorization |
| A deferred WAG redemption is approved | RAS | An access token with the local agent principal as sub, no act, and no refresh token |
| The gateway exchanges at the CAI an access token from a deferred redemption, or one refreshed from it | CAI | HTTP 400, invalid_request; the authorization is not eligible for continuation |
| Specification | Relationship |
|---|---|
| [DTR] | Profiled for governed token exchange and governed grant redemption. Narrowed: DPoP on every deferred request; all governed checks before deferring and again at resolution; the token keeps the request's agent, user, client, and key. At the RAS: a deferred grant is accepted once, the absolute authorization expiration starts on acceptance, and no deferral where mutual-TLS access tokens are configured. Meets the profile obligations of Section 4.2 of [DTR]: an approval of narrower authority is the narrowing-only update, and recovery re-delivers the deferral code without advancing the request |
| [AROP] | Token issuance completion profiled at the RAS (Section 5): the approval expiry bounds what the RAS issues, every refresh is evaluated again with the approval, recovery replaces idempotent submission, and the authorization is not eligible for continuation. Not profiled at the IdP, where approved_until would bound tokens the RAS issues (Appendix C) |
| [ARAP] | One way to route an approval; at the RAS, its approval object is the approval kept unchanged (Section 5.3) |
| [ICA] | A deferred continuation holds the assertion's replay reservation while pending, replacing one transition of Section 5.5.7.1 of [ICA], and counts the limits of Section 6.3 of [ICA] when the onward grant issues (Section 4.5) |
| [RFC7521], [WAG] | Departed from for a deferred redemption: the access token can outlive the assertion. The approval expiry, any enforcement deadline, and the absolute authorization expiration bound its expiration; the maximum pending lifetime bounds only when it can issue (Section 5.2) |
| [CIBA] | One way to reach a user for a decision; not profiled |
| [MCP] | Informative realization of per-action oversight (Section 8) |
| [MISSION-APPROVAL] | Approves a task, where this document approves a governed request. A Mission approval can be the basis of standing authorization under which requests are human out of the loop |
| [AIMS] | Nearest counterpart for confirmation bound to an authorization grant (Section 10.8 of [AIMS]); here the IdP issues the grant after the decision |
| [OVERSIGHT-ACTS] | Vocabulary for the kinds of human act (Section 3) |
AROP at the IdP, and continuation from a deferred redemption.
At the IdP, [AROP]'s approved_until would bound tokens the RAS
issues, a downstream condition the composition cannot enforce
("Issuance Authorization" in [FEDERATION]). From a deferred
redemption, continuation exchanges the access token at the CAI and
the resulting assertion at the IdP, and [AROP] does not say
whether an onward grant that the IdP authorizes on its own derives
from the approval. Both need [AROP] to state that the approval
expiry bounds what the deferring server issues. Continuation also
needs a rule for how that expiry meets the continuation window.¶
Administering the mode. No attribute records the oversight mode on a Delegation or Agent Authorization in the SCIM management profile.¶
Overseer notices. Whether a Shared Signals event should carry supervised-issuance notices.¶
Duplicate pending requests at the IdP. Whether the IdP should return the existing pending request when the same governed request context is requested again while one is pending. At the RAS, recovery settles this (Section 5.4).¶
Originating-grant preconditions. Whether the preconditions of the originating grant that Section 11.7 of [DTR] re-evaluates include the grant's own expiration when the client does not present the grant again. Section 5.2 reads them as checked on receipt.¶
Continuation mode floor. Mode policy takes the chain's root
client as a continuation's client (Section 3), so a continuation
meets the mode of the same request made directly. Whether policy may
also lower the mode on account of the continuing client is open. A
negative test comes before the choice between a rule and guidance:
approval required for a direct request, and the gateway's
continuation without the opt-in, which fails with invalid_target
(Section 4.1).¶
RFC Editor: Remove this section before publication.¶
Initial version.¶
TBD.¶