Internet-Draft Agent Principal Federation November 2026
McGuinness Expires 15 May 2027 [Page]
Workgroup:
Web Authorization Protocol
Internet-Draft:
draft-mcguinness-oauth-governed-agent-federation-latest
Published:
Intended Status:
Standards Track
Expires:
Author:
K. McGuinness
Independent

OAuth 2.0 Profile for Agent Principal Federation

Abstract

Resource domains need a stable identity for an enterprise-governed agent without understanding the runtime, workload credential, or OAuth client through which it executes. Enterprises govern such agents independently of those platforms, workloads, and clients.

This document is an OAuth deployment profile that standardizes the boundary between execution identity and governed identity. An enterprise identity provider resolves an authenticated OAuth client or workload identity to a governed Agent Principal in the identity provider's namespace, which may reuse the execution identity's identifier, and conveys that principal to a resource domain. Identity resolution, client authority, user delegation, and resource authorization remain separate decisions. No new workload credential format is defined.

Two peer realizations carry the Agent Principal: delegated access through the Identity Assertion JWT Authorization Grant (ID-JAG), with the user as subject and the agent as actor, and self-acting access through the Workload Authorization Grant (WAG), with the agent as subject.

About This Document

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-federation.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-mcguinness-oauth-governed-agent-federation/.

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.

Status of This Memo

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.

▲

Table of Contents

1. Introduction

Enterprises run agents on platforms they do not operate. Each platform issues its own identity for the workload it runs, and that identity is not the principal the enterprise governs. A platform integration commonly uses one shared OAuth client, so the resource server cannot tell the agents behind that client apart. Individual actions cannot be attributed, and authorization cannot be withdrawn from one agent without withdrawing it from all of them.

What an enterprise needs instead is a principal it can authorize once, audit across resources, and disable in one place. That principal's identity does not change when the agent moves between platforms or rotates credentials. Disabling it at the IdP stops new grants; reaching authority that resource domains have already issued takes a provisioning or signaling contract, such as [AGENT-LIFECYCLE] (Section 12.8).

Existing OAuth mechanisms authenticate clients and carry actors. They do not resolve different client and workload identities to one governed principal, separate authority to use that principal from identity resolution, or correlate it across authorization domains (Section 4.1.1). This document is an OAuth deployment profile that fills those gaps.

Giving each agent its own OAuth client, as some deployments do, makes the agent identifiable to the authorization server that registered it, but the client identifier is not that principal. It names a registration, usually assigned separately at each authorization server and replaced when the agent moves to another platform or client. The difference shows in three cases. A resource domain that restricts an agent by its client identifier readmits it when the agent moves to another client; agents behind one shared client cannot be told apart; and a gateway that calls further resource domains is one client for every agent behind it ([CONTINUATION]). This profile's mandatory path starts from such a dedicated client (Section 9.1) and adds what the client identifier lacks. The IdP resolves the client to an Agent Principal through an Identity Binding (Section 5.3) and authorizes the client to use that principal through a Client Association (Section 5.3.6). The grant carries the principal as the actor, separate from the client, and the resource domain decides whether that actor may act for the user (Section 3.6.4). A shared client reaches the same principal by presenting an existing platform JWT (Section 5.3.3), under a claim of generic shared-client interoperability (Section 9.1).

1.1. Protocol Overview

A platform runs several agents behind one OAuth client. Client authentication identifies the platform, but the resource needs to know which agent is acting. The identity provider (IdP) maps an authenticated client or workload identity to a stable Agent Principal and checks whether the client may use that identity. It issues a grant identifying the agent. The resource domain correlates that identity with its local principal (an account it manages) and applies its own authorization policy at its resource authorization server (RAS) and API. Delegated access identifies both the user and the agent; self-acting access identifies the agent as the subject.

The client makes three requests, which Appendix A.1 shows message by message:

  1. To the IdP token endpoint, an OAuth Token Exchange request [RFC8693] (Section 5.2). The IdP returns the grant: a short-lived JWT, signed by the IdP, for one resource at one RAS.

  2. To the RAS token endpoint, presenting the grant with the jwt-dpop grant type if it is bound to the client's key, or the JWT bearer grant type if not (Section 6.1). The RAS returns an access token.

  3. To the API, with the access token (Section 7).

 Client authentication or workload evidence
                      |
               Identity Binding .......... which agent?
                      v
       Agent Principal (IdP namespace)
                      |
              Client Association ........ may this client use it?
                      |
          +-----------+------------+
          |                        |
 Delegation Authorization    Agent Authorization
   agent acts for user         agent acts for itself
          |                        |
 ID-JAG: sub = user          WAG: sub = agent
         act = agent               |
          |                        |
          +-----------+------------+
                      |
                      v
 RAS: validate grant; correlate agent with local principal
                      |
                      v
 RAS and API: resource authorization; actor gate if delegated
Figure 1: One governed transaction

Each relationship answers one question:

  • Identity Binding (IdP): Which governed agent does this credential identify?

  • Client Association (IdP): May this OAuth client use that agent's identity?

  • Agent or Delegation Authorization (IdP): What authority (scope and any authorization details for one resource) may the agent request, on its own or for a user?

  • Correlation and resource policy (RAS and API): What access will the resource domain permit? For delegated access, this includes the actor gate: may this agent act for this user?

For example, an Identity Binding maps the platform identity workload-7, qualified by its issuer, to the Agent Principal (https://idp.example/, agent-42). Grants carry that IdP-qualified principal, not the platform identity:

Platform identity:  https://platform.example/  workload-7
                            |  Identity Binding at the IdP
                            v
Agent Principal:    https://idp.example/       agent-42

Delegated ID-JAG (excerpt):
  "sub": "alice",
  "act": {"iss": "https://idp.example/", "sub": "agent-42"}

Self-acting WAG (excerpt):
  "iss": "https://idp.example/", "sub": "agent-42"
Figure 2: One identity transformation

The act claim is the actor claim of Token Exchange (Section 4.1 of [RFC8693]): it names the party acting for the subject.

The relationships do not imply one another. Mapping an identity grants no permission, owning an agent does not establish a user's delegation to it, and how far and how fast disablement propagates depends on the lifecycle mechanism a deployment selects, such as [AGENT-LIFECYCLE].

Clients and IdPs support dedicated-client resolution: one OAuth client per agent, authenticating with private_key_jwt, so that client authentication identifies the agent (Section 5.3.2). For delegated access, they also support ID Token subjects. Deployments may use other mutually supported inputs. The existing platform JWT input is required for generic shared-client interoperability; when used, it accompanies each grant-issuance request to the IdP (Section 5.3.3; Appendix A.2.1 shows one). Conformance follows Section 9.1.

Section 3 and Section 4 apply to every role. The IdP's processing is in Section 5, the RAS's in Section 6, and the API's in Section 7. [GUIDE] adds a primer and the configuration each party maintains.

The profile sits within the agent identity management framework that AIMS [AIMS] describes and defines how the identities in one transaction relate across authorization domains.

The federation model (Section 3) is independent of the grant that carries it. Two peer realizations carry it, each with its own mandatory path, and an implementation claims one or both (Section 9.1):

  • Delegated access (Section 4.1): the Identity Assertion JWT Authorization Grant (ID-JAG) [ID-JAG], with the user as subject and the Agent Principal as actor.

  • Self-acting access (Section 4.2): the Workload Authorization Grant (WAG) [WAG], with the Agent Principal as subject.

Other grant realizations need their own composition rules. Dedicated-client assertions and existing platform JWTs supply inputs to this identity model (Section 5.3.1). [INPUTS] defines further inputs, such as SPIFFE JWT Verifiable Identity Documents (JWT-SVIDs).

This document federates an agent governed by the IdP that issues the grant into a resource domain. It does not define identity continuity across a chain of IdPs or brokers. Forwarding an actor from another IdP's namespace is out of scope. Also out of scope (Appendix B):

  • task or mission authorization;

  • asynchronous approval;

  • continuation of approved work across grants;

  • provisioning protocols and account administration ([GUIDE]);

  • multi-agent delegation chains;

  • authorization of individual client instances, and propagation of instance context across domains; and

  • enrollment or key-replacement protocols.

Each processing chapter covers delegated and self-acting access, with client requirements beside the requests and responses.

2. Conventions and Terminology

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 [BCP14] (RFC2119) (RFC8174) when, and only when, they appear in all capitals, as shown here.

OAuth and Token Exchange terms follow [RFC6749] and [RFC8693]. Client Attestation terminology follows [ATTEST]. Actor Profile refers to [ACTOR-PROFILE].

2.1. Roles

Agent Platform (the platform):

The environment that runs agents. It supplies verifiable workload evidence from its own or an approved external credential authority and can implement the OAuth client that obtains access for an agent.

Client:

Software making OAuth requests for an agent. It authenticates as an OAuth client and presents the evidence, target, and proofs for the selected grant flow.

Identity Provider (IdP):

The OAuth authorization server that resolves validated inputs to an Agent Principal, checks the permitted client and acting relationship, and issues a grant naming that agent as subject or actor.

Resource Authorization Server (RAS):

The OAuth authorization server that validates the grant, resolves its identities, applies local policy, and issues an access token for its resources.

API (resource server):

The OAuth resource server that accepts the access token and enforces the acting relationship and proof binding it carries.

One service can implement several roles.

Two companion System for Cross-domain Identity Management (SCIM) profiles complete the family and define their own administrative roles. [AGENT-MANAGEMENT] establishes the relationships at the IdP, and [AGENT-LIFECYCLE] carries the principal's administrative state into the resource domain and revokes what depends on it.

2.2. Terms

Agent Principal:

A stable, non-human authorization principal in the IdP's namespace representing an independently governed workload or agent. It is independent of the external credentials, execution environments, and OAuth clients used to obtain authorization for it (Section 3.4).

Workload:

An external computational principal identified by accepted workload evidence. It can span multiple running instances; its identity does not necessarily distinguish executions.

Dedicated client:

An OAuth client whose authenticated identity maps explicitly to one Agent Principal in the IdP's client-registration context. Dedicated refers to identity resolution, not to one process, replica, or installation.

Shared client:

An OAuth client serving multiple Agent Principals. Its authenticated client identity alone cannot distinguish those agents; resolution requires independently validated workload identity.

Identity Binding:

An approved association from an exact client or workload identity, qualified by its registration context or credential authority, to one Agent Principal. The Agent Principal can have the same identifier as that identity. An Identity Binding is administered in a Governance Tenant and establishes identity resolution, not permission to exercise the agent.

Client Association:

An approved permission for an authenticated OAuth client to use an Agent Principal through the selected Identity Binding, acting relationship, and credential class (Section 5.3.6).

Credential class:

A configured category of agent-resolution input with mutually exclusive validation rules. Examples are an RFC 7523 client assertion, a SPIFFE Verifiable Identity Document (SVID), Client Attestation, and a platform issuer's workload JWT profile. JWT encoding alone does not identify the class.

Acting relationship:

Whether the Agent Principal acts as the subject of a grant (self-acting) or as the actor for a user (delegated).

Delegation Authorization:

The IdP's decision that an Agent Principal may act for a user within an approved client, tenant, target, and authority context.

Agent Authorization:

The self-acting counterpart of Delegation Authorization: the IdP's decision that an Agent Principal may access a target on its own behalf within an approved client, tenant, target, and authority context.

Agent Principal Correlation:

The RAS's authoritative association of an IdP-qualified Agent Principal with a local principal.

Issuer-bound presenter key:

A key the credential issuer has attested belongs to the workload, such as a Client Attestation's confirmation key. It shows that the credential authority authorized the key.

Request proof key:

A key the presenter proves in the request without issuer attestation, as with Demonstrating Proof of Possession (DPoP) [RFC9449] accompanying bearer evidence. It shows possession alone (Section 5.3.4).

Grant proof key:

The DPoP key proven when requesting an ID-JAG or WAG and bound into that grant for redemption (Section 5.3.4).

Governance Tenant:

The IdP's administrative scope within which an Agent Principal and its relationships are managed: a tenant of the IdP's issuer in the sense of Section 6.1 of [ID-JAG]. It is not part of the Agent Principal's identity, which the IdP issuer qualifies (Section 3.3).

Target Tenant:

The tenant at the RAS in which the agent or user is authorized, that is, where authority is exercised. It can differ from the Governance Tenant.

Where the meaning is clear, this document uses agent as shorthand for Agent Principal.

3. Federation Model

Figure 1 shows how the relationships compose.

One Agent Principal can carry several Identity Bindings and several Client Associations (Section 5.3.6).

Establishing one relationship MUST NOT be treated as establishing another.

3.1. Resource Domain Contract

The mapping from execution identity to Agent Principal is local to the IdP. The security contract across the boundary between the IdP and the resource domain is interoperable. The RAS does not resolve the agent from the execution credential; the grant carries the resolved Agent Principal instead. The RAS performs no platform-specific credential validation or workload resolution and need not know which input the agent authenticated with. From a validated grant it receives:

  • the Agent Principal, qualified by its governing issuer: act.iss and act.sub in an ID-JAG (Section 5.6.4), or iss and sub in a WAG;

  • the acting relationship: delegated, with the user as subject, or self-acting;

  • the client's registration at the RAS, in client_id; and

  • the authority the IdP approved (scope and any authorization details), as a ceiling for the RAS decision.

The RAS correlates the Agent Principal with a local principal, which can be an existing service principal. Correlation does not replace the IdP-qualified identity (Section 6.3). For delegated access, the RAS translates the user into its local namespace and preserves the agent (Section 6.4.2). Correlation does not grant authority: the RAS decides within the grant's ceiling (Section 3.6.4, Section 6.5).

3.2. Authentication, Resolution, and Proof

The IdP MUST validate a credential according to its configured type before using it for identity resolution. A generic JWT token-type URI, an unverified header, or a caller-supplied claim MUST NOT select a weaker validation path or establish an Identity Binding.

Credential metadata follows its credential specification; discovery MUST NOT establish trust. Request hints, discovered client metadata, and unverified JWT claims MUST NOT by themselves establish credential-authority trust or change an approved Identity Binding or Client Association.

The IdP MUST NOT substitute one of three distinct functions for another:

  • Client authentication: evidence authenticating the OAuth client.

  • Agent resolution: resolution of the authenticated dedicated-client identity or independently validated workload identity through an Identity Binding to exactly one Agent Principal.

  • Key possession: proof that the presenter controls a key, with the binding semantics of the proof mechanism.

Up to three identities meet in one request:

None of them is inferred from another. With a dedicated client, the authenticated client identity is itself the resolution input, and no separate workload identity exists. The distinction between an issuer-bound presenter key and a request proof key (Section 2.2) determines what a proof establishes.

The same credential can serve client authentication and agent resolution without making the client and agent the same principal. Successful client authentication MUST NOT imply successful agent resolution. Successful agent resolution MUST NOT imply permission for the authenticated client to exercise that agent.

3.3. Canonical Identity and Tenant Boundaries

The Agent Principal identifier MUST be unique and non-reassignable within the IdP issuer's namespace, across all Governance Tenants sharing that issuer identifier. The Governance Tenant is not part of the downstream agent identity. A tenant-local identifier therefore needs qualification to meet this issuer-wide uniqueness requirement before use as an Agent Principal identifier. The Agent Principal identifier need not equal an external subject, OAuth client identifier, SPIFFE ID, display name, or instance identifier.

This profile provides identity continuity for the agent across changes of execution environment, through Identity Binding, and across the boundary between the IdP and the resource domain. Identity continuity is an explicit decision by the governing authority to preserve the same principal. It does not imply that the principal's permissions remain unchanged. It is also not work continuity: whether an approved task, with its purpose, approval, and lifecycle, still justifies an action is outside this profile.

After a transfer to a different Governance Tenant under a different administrative authority:

  • The IdP MUST assert the agent under a new Agent Principal identifier.

  • Delegations held for the previous identifier do not carry forward automatically (Section 3.6.2).

  • RAS principal links held for the previous identifier MUST NOT be re-keyed to the new identifier (Section 6.3).

For example, moving an agent to another customer's governance domain creates a new identity. Renaming a tenant or changing its owner or administrator within the same governance domain does not by itself change the principal. This document defines no cross-tenant identity migration protocol.

The IdP MUST establish an unambiguous Governance Tenant and, before issuance, the Target Tenant for the requested RAS and resource. The RAS MUST interpret an agent identifier in its asserted issuer context and MUST NOT key agent authorization on a bare sub. Tenant resolution failures use the errors in Section 4.7 and Section 5.8.

A single-tenant issuer has one Governance Tenant, which the issuer identifies. A multi-tenant issuer identifies each of its tenants by tenant together with the issuer (Section 6.1 of [ID-JAG]). At a multi-tenant issuer:

  • The IdP MUST NOT issue an ID-JAG for an agent whose Governance Tenant is not the user's tenant, which the ID-JAG's tenant claim names (Section 6.4 of [ID-JAG]). That claim therefore also names the agent's Governance Tenant.

  • The IdP MUST include tenant, set to the agent's Governance Tenant, in every WAG (Section 5.7.2), the claim that Section 6.3 of [WAG] recommends for an issuer that several tenants share.

  • The RAS MUST reject a WAG with invalid_grant unless tenant is present and the RAS trusts iss and tenant together for the Target Tenant, as Section 4.4.1 of [ID-JAG] requires for an ID-JAG.

Only a multi-tenant issuer includes tenant (Section 6.1 of [ID-JAG]), so a grant that carries it is from one, whatever the RAS's configuration says of the issuer. The RAS MUST reject such a grant with invalid_grant unless it trusts iss and that tenant together for the Target Tenant. A RAS configured with the issuer alone therefore fails closed instead of trusting every tenant of a shared issuer.

A RAS's trust in a multi-tenant issuer to assert agents, including just-in-time correlation (Section 6.3.1) and an actor-gate rule that admits every agent an issuer asserts, is therefore trust in each issuer tenant the RAS trusts for the Target Tenant. The access token does not carry the issuer tenant, so an API that evaluates the actor gate itself cannot narrow such a rule to one of those tenants. The Agent Principal identifier remains unique across the issuer, and tenant does not become part of the agent's identity.

3.4. Governance Boundary and Execution Independence

Clients, workloads, or other actors that require independently managed authorization, delegation, attribution, resource correlation, or disablement as principals need separate Agent Principal identities. This holds even when they share a runtime, OAuth client, workload credential, or deployment. Differences in process, replica, session, worker, or credential alone do not require distinct identities.

An execution that shares its authorization, delegation, attribution, resource correlation, and disablement with an Agent Principal can run as that Agent Principal. A sub-agent working entirely within its parent's authority and attributed to it is an example. An execution that needs any of these separately needs its own identity.

Multiple executions can operate as the same Agent Principal. An agent can move between workloads or execution environments through approved Identity Bindings. Conversely, one environment can host multiple Agent Principals. The validated resolution input and its Identity Binding therefore need to distinguish exactly one Agent Principal for each authorization transaction. The IdP rejects an ambiguous mapping (Section 5.3.6), and a shared workload identity alone cannot select among agents.

Scaling, restarting, rescheduling, migration, credential rotation, or creation of additional executions, replicas, credentials, Identity Bindings, or Client Associations does not by itself create, merge, transfer, or increase Agent Principal authority. This profile defines no aggregate budget, quota, or concurrency semantics.

3.5. Grant Paths

An Agent Principal is not intrinsically self-acting or delegated. The authorization transaction determines whether it is represented as the subject, in a WAG (Section 4.2), or as the actor for a user, in an ID-JAG (Section 4.1). Authorization for one relationship does not imply authorization for the other.

3.5.1. Delegated and Self-Acting Access Compared

Table 1: Delegated and self-acting access compared
Area Delegated ID-JAG Self-acting WAG
Subject User, from the subject credential Agent Principal, from the agent-resolution input
Agent in the grant Agent Principal in act Grant subject, with no act (Section 5.7.2)
Agent at the RAS Correlated to a local agent principal (Section 6.3) and kept in act beside the local user as subject Correlated to a local agent principal, which becomes the subject (Section 6.3)
Authorization Delegation Authorization Agent Authorization (Section 3.6.1)
Client Association For delegated issuance A separate one for self-acting issuance
API enforcement User authority and the actor gate The agent's own authority; no actor gate
Refresh RAS refresh under explicit policy None; WAG prohibits refresh tokens

3.6. Authorization Relationships

The basis for Agent or Delegation Authorization is a deployment choice. Administrator assignment, organizational policy, and task authorization are all acceptable, as is user consent for Delegation Authorization. Assignment and approval records and their storage are outside this profile.

The RAS and API determine effective resource and operation authorization, including the actor gate (Section 3.6.4). The IdP need not interpret every tool argument or business object. An issuance decision that depends on those semantics requires authoritative resource-domain evaluation, locally or through a trusted policy service.

3.6.1. Agent Authorization

For self-acting access, the IdP MUST authorize the resolved Agent Principal to access the requested RAS, resource, and authority on its own behalf in the requested client and tenant context. The IdP MUST do so before issuing a grant that names the agent as subject. The IdP MUST reject missing, revoked, expired, or insufficient Agent Authorization. Valid credentials, an active Identity Binding, or a Client Association MUST NOT imply it. Agent Authorization MUST NOT be inferred from a Delegation Authorization involving the same agent. Denied self-acting access MUST NOT fall back to delegated access or to a broader authority.

3.6.2. Delegation Authorization

Before constructing act, the IdP MUST authorize the resolved Agent Principal to act for the user in the requested client, tenant, RAS, resource, and authority context. The IdP MUST reject missing, revoked, expired, or insufficient delegation authorization. Valid credentials, user sign-in, or a shared client MUST NOT imply that authorization or permit one agent to use another agent's.

3.6.3. Authorization Lifetime

Credential or grant expiration does not by itself terminate an access token or RAS refresh authorization already issued; the grant's exp limits redemption, not subsequent access.

The RAS MUST limit access-token and refresh-authorization lifetimes under its local policy (Section 8.2). Section 4.1 of [RFC7521], which both grants follow under jwt-bearer (Section 2.1 of [RFC7523]) and jwt-dpop (Section 4.1 of [JWT-DPOP-GRANT]), recommends that an authorization server not issue an access token with a lifetime that exceeds the validity period of the assertion by a significant period; this document does not change that recommendation. This profile defines no portable IdP-imposed deadline on downstream authorization (Appendix B.3) and requires no shared approval record or correlated lifetime lookup.

3.6.4. Delegated Actor Authorization

For delegated access, the RAS and API MUST enforce both:

  • User authority: the requested operation is within the user's permissions and the grant or token's authorized scope and constraints.

  • Actor gate: the issuer-qualified agent is permitted to act for that user in the selected tenant and resource, within the authorized delegation. A valid signature or an act claim alone does not open the gate. Failure to establish the gate MUST result in denial.

The actor gate is an authorization condition, not a protocol object (Section 10.2). Requiring the agent to also hold independent permissions on each object is local policy, not a baseline requirement.

Every operation the API permits MUST be covered by an applicable actor-gate authorization. The API MAY evaluate the gate directly or rely on a validated RAS authorization whose scope and freshness satisfy resource policy.

An ID-JAG issued under this profile asserts that the IdP authorized the specified delegation within the grant's constraints. It does not assert that the RAS's policy has been satisfied, and it does not convey the IdP's underlying approval records. The RAS MUST independently decide whether to accept that delegation under its local user, actor, client, tenant, and resource policy.

The client identifier MUST NOT stand in for the actor in authorization.

4. Profiles and Common Rules

4.1. Delegated Access with ID-JAG

This document profiles ID-JAG issuance and redemption through the actor extension point in Section 9.10 of [ID-JAG]. Where it is silent, ID-JAG applies unchanged.

4.1.1. Relationship to Base Specifications

[ID-JAG] profiles OAuth Identity and Authorization Chaining Across Domains [ID-CHAINING]: an IdP that resource domains trust issues the JWT authorization grant. Existing OAuth mechanisms leave three relationships open:

  1. How different client and workload identities resolve to the same governed principal. [ATTEST] and [SPIFFE-OAUTH] authenticate OAuth clients, not the agents a shared client serves.

  2. How authority to use that principal is separated from identity resolution. ID-JAG leaves two things to extensions (Section 9.10 of [ID-JAG]): validating and authorizing an actor, and relating client, subject, and actor.

  3. How the resulting principal is represented and correlated across authorization domains. [RFC8693] defines the act claim. It does not define how that claim names an actor authenticated through a client or workload credential, or how a resource domain correlates that name with local state.

Appendix B.1 lists how this profile fills them; the referenced sections define each requirement.

4.2. Self-Acting Access with WAG

Self-acting access is a peer realization of the federation model: the Agent Principal is the subject of a Workload Authorization Grant (WAG) [WAG] issued by the IdP (Section 5.7) and redeemed at the RAS (Section 6.5). This document specifies a governed composition of WAG, including the issuance exchange, client binding, principal correlation, and grant protection. Generic WAG support does not imply these requirements. This document defines the complete wire contract it relies on, so [WAG] is an informative reference, and the composition remains subject to alignment with the evolving WAG specification (Appendix B.2.1). Appendix B.1 compares this composition with WAG-02.

4.3. Adoption Profiles

The adoption path preserves existing Enterprise-Managed Authorization [EMA] deployments, which need no changes to continue, and adds agent governance before requiring grant binding. The names identify deployment profiles, not assurance ratings.

Table 2: Adoption profiles
Adoption profile Required addition Grant protection
Enterprise access Existing EMA and base ID-JAG; no separate Agent Principal required Existing deployment policy
Governed agent access Agent resolution, Identity Binding, Client Association, governed actor (delegated) or subject (self-acting), tenant enforcement, downstream actor gate (delegated) Unbound grants permitted only by explicit policy; any binding present is enforced
Bound governed agent access All governed agent requirements plus DPoP at grant issuance and redemption cnf.jkt and same-key continuity required

Enterprise access is a migration baseline, not conformance to this document's governed profiles. Adding act alone does not establish governed agent conformance: identity resolution and actor authorization are also required. The adoption profiles apply to both realizations, each under its own URIs (Section 9.2).

"Bound" refers to sender constraint on the grant, ID-JAG or WAG, between issuance and redemption. It does not imply sender constraint on the agent-resolution credential or the resulting access token. Grant protection, workload-evidence protection, and access-token protection are separate choices. Even bound governed agent access can use bearer workload evidence and, under explicit resource policy, bearer access tokens.

4.4. Grant Protection

Client authentication and all governance requirements remain mandatory in either adoption profile.

By profile:

  • Bound governed agent access: The client MUST supply a DPoP proof at issuance. The IdP MUST reject a missing proof with invalid_request. The RAS MUST require cnf.jkt in the grant.

  • Governed agent access: DPoP support is OPTIONAL. The IdP and RAS MAY issue and accept grants without cnf only when trusted policy explicitly permits them for the client, trust relationship, and resource.

In both profiles:

  • Supplied proof: A supplied DPoP proof MUST be validated under [RFC9449]. An endpoint that does not support DPoP MUST reject a request containing a DPoP proof with invalid_request; it MUST NOT silently ignore the proof. At issuance, a valid proof MUST result in cnf.jkt binding of the grant, as in Section 9.11.1.1 of [ID-JAG].

  • Bound grant: A grant containing cnf MUST have a valid, supported jkt binding, and the client redeems it with the jwt-dpop grant type (Section 6.1). The RAS MUST require a fresh DPoP proof whose public key thumbprint matches exactly, as in Section 9.11.1.2 of [ID-JAG] and Section 5 of [JWT-DPOP-GRANT]. Missing required binding, unsupported confirmation, or key mismatch MUST fail with invalid_grant. A missing proof MUST fail with invalid_grant (Section 9.11.1.2.2 of [ID-JAG]) or invalid_dpop_proof (Section 5 of [JWT-DPOP-GRANT]).

  • Unbound grant: When policy permits a grant without cnf, the client MAY present a DPoP proof only at redemption to obtain a DPoP-bound access token (Section 6.7). That proof does not retroactively bind the grant.

  • Credential proof: Selecting governed agent access MUST NOT disable proof required by the agent-resolution input or client authentication method.

4.5. Client Authentication and Algorithms

Client authentication: RFC 7523 client authentication at either server follows Section 5.3.2. JWT-SVID client authentication at either server is not a dedicated-client method; an implementation that uses it claims the JWT-SVID input of [INPUTS] and follows its rules. Other configured methods MAY be used, and client identifiers and keys MAY differ between servers.

Algorithms: Each implementing role MUST support the capabilities below for the artifacts it produces or validates:

Table 3: Mandatory-to-implement algorithms
Artifact Mandatory-to-implement (MTI) capability
ID-JAG or WAG IdP signing and RAS validation: RS256 (Section 5 of [RFC7523])
private_key_jwt Client signing and IdP/RAS validation: RS256 under Section 5 of [RFC7523]
DPoP, where supported or required Client proof generation and server validation: ES256, a minimum [RFC9449] does not prescribe

Other algorithms permitted by the selected specification MAY be used through trusted configuration and metadata.

4.6. Time, Replay, and Key Validation

Validators MUST enforce:

  • Time claims: Apply the selected credential's expiration and other time rules. Reject iat later than the current time plus permitted clock skew. Under [RFC7519], iat has no not-before semantics.

  • Clock skew: Use a configured tolerance that MUST NOT extend a configured maximum age or lifetime. It SHOULD remain within the few minutes contemplated by [RFC7519].

  • Replay protection: Apply each credential, proof, and grant mechanism independently. Where a mechanism retains replay state, that state MUST remain in effect for as long as the credential, proof, or grant would otherwise be acceptable, including the maximum allowed skew.

Key lookup MUST retain the issuer or trust-domain association (Section 3.8 of [RFC8725]).

A fresh proof does not renew an expired credential; an unchanged identifier does not authorize a new proof key.

An IdP that accepts [WISE] events from a credential authority it trusts MUST stop accepting, for agent resolution, the following from the time each event takes effect (Section 2.3 of [WISE]), within the credentials, trust material, and trust domains that its configuration trusts that authority for:

  • a credential that credential-revoked or credential-compromised identifies;

  • trust material that trust-anchor-revoked identifies; and

  • credentials from a trust domain that trust-domain-federation-revoked names.

An event about anything outside that scope changes no resolution: an authority that ends its own federation with a trust domain does not end trust that the IdP's configuration places in that domain directly. Disabling an Identity Binding or the Agent Principal in response is IdP policy (Section 12.8): an agent can have other valid bindings.

4.7. Token Endpoint Errors

Token endpoint errors follow Section 5.2 of [RFC6749] and the applicable extension, authentication, and proof specifications. Servers MUST validate client authentication, credentials, and proofs before authorization. Proof, grant-binding, grant-claim, and authorization-detail failures use the errors specified in Section 4.4, Section 6.2, Section 5.2, and the applicable input profile. Section 5.8 and Section 6.9 list the failures specific to each server.

Table 4: Target, authority, and user-resolution errors
Failure Error
Unacceptable resource parameter at exchange, redemption, or refresh, including multiple values or a target outside the grant or retained authorization invalid_target under RFC 8707
At the IdP, Target Tenant cannot be resolved for the requested resource invalid_target
At the RAS, the grant's resource has no Target Tenant that can be determined unambiguously, or is not a resource governed for it invalid_grant (Section 4.4.1 of [ID-JAG])
No client registration association exists for the requested RAS (Section 5.1) invalid_target
Unacceptable requested scope, invalid scope reduction, or no non-empty scope can be issued, except where Section 5.4 assigns actor_unauthorized invalid_scope
User cannot be resolved, user or required link is disabled, or subject identifiers conflict invalid_grant; no token or automatic linking fallback

Client authentication failures use the authentication method's error, including when the same credential supplies an agent-resolution input.

Error descriptions SHOULD NOT reveal identity, binding, or policy details beyond those disclosed by the error category (Section 12.3).

4.8. Profile Applicability and Downgrade Prevention

Profile applicability follows these rules:

  1. Establish policy: Before exchange, trusted configuration MUST establish the applicable governed profile and minimum requirements for the client, issuer trust relationship, and target resource. The client, IdP, and RAS MUST use that configuration. This document defines no transaction-level profile negotiation.

  2. Enforce the minimum: Each server MUST enforce its configured minimum regardless of absent actor_token, act, DPoP, or cnf. Their presence or absence MUST NOT select a different profile. Metadata advertises capabilities; it MUST NOT authorize a lower profile or override resource policy.

  3. Prevent fallback: Implementations MUST NOT retry a failed governed request as ordinary EMA or drop proof to retry as governed agent access. A lower profile requires a separately authorized configuration, not an error-driven fallback.

  4. Enforce resource policy: The RAS and API MUST agree on the minimum profile for their resource. The API relies on the RAS to enforce grant protection. An access token's cnf describes the token's own protection. It does not establish which grant profile was used. Where multiple paths share a resource, applicability follows Section 7.

An implementation MAY serve existing EMA and either governed profile concurrently under these rules. Supporting the bound profile does not require accepting grants without sender constraint or advertising the intermediate profile.

Migration changes the configured profile after the participating roles implement its requirements. It does not relabel previously issued grants or refresh tokens.

5. Grant Issuance at the IdP

5.1. Issuance Prerequisites

Relationships: The IdP MUST issue a grant only under the applicable identity, client, delegation, and target relationships (Section 3); [GUIDE] describes their configuration.

Downstream client: The IdP MUST derive the grant's client_id from an authoritative association between the authenticated IdP client and that client's registration at the target RAS (Section 5.1 of [ID-JAG]). This client registration association is not a Client Association. If the client uses one identifier at both servers, such as a Client ID Metadata Document (CIMD) Client Identifier URL [CIMD], the association is the identity mapping. A client-supplied downstream client identifier MUST NOT select or override that association.

Several IdP clients MAY map to one registration at a RAS, such as the dedicated clients of one platform's agents, or one client registered at several IdPs. The RAS then cannot tell those clients apart: its client policy, its audit, and any restriction keyed on client_id apply to all of them, while a restriction of an agent follows the agent (Section 6.3). Every holder of that registration's credentials can redeem a grant that names it, and can use a refresh token bound only to that registration (Section 8.2), so only a grant or refresh token also bound to a key stays with the key that obtained it.

An IdP client MAY also map to a different registration at a RAS for self-acting grants than for delegated grants, so that the client registration tells the two token populations apart (Section 7.1). The association then names a registration for each acting relationship, and a grant's client_id is the registration for its own. The client still holds both acting relationships at the IdP; Section 12.7 describes the separation that limits an agent refused for a user.

5.2. Token Exchange Request

Both grants are requested with a token exchange request [RFC8693] to the IdP token endpoint. The client authenticates as the configured client and supplies any proof required by Section 4.4. Both requests carry these REQUIRED parameters:

Table 5: Token exchange parameters common to both grants
Parameter Value
grant_type urn:ietf:params:oauth:grant-type:token-exchange
audience One target RAS issuer identifier
resource Exactly one resource URI under [RFC8707], served by the RAS named in audience
scope Non-empty scope string for the requested resource

Resource: A client requiring access to multiple resources MUST obtain a separate grant for each resource. The IdP MUST reject multiple resource parameters with invalid_target. The resource URI conveys the Target Tenant through the configured resource-to-tenant association, not the IdP's Governance Tenant.

Scope and authorization details: authorization_details MAY accompany the required non-empty scope and is processed under ID-JAG. The IdP MUST constrain all granted scope and authorization_details to the requested resource. If requested authorization details cannot be confined to it, the IdP MUST reject the request with invalid_authorization_details under Section 6 of [RFC9396] rather than authorize additional resources.

Section 5.6.1 and Section 5.7.1 add the parameters of each grant.

5.3. Agent Resolution

The IdP resolves the Agent Principal from validated inputs through an approved Identity Binding. For delegated access, it also resolves the user (Section 5.6.3). The RAS then correlates both with its local principals (Section 6.3, Section 6.4.2).

5.3.1. Agent Resolution Inputs

Every agent-resolution input satisfies this contract, which summarizes requirements stated in the cited sections and in each input's definition:

  • Independent validation: The credential is validated under its configured credential profile before it is used for resolution (Section 3.2).

  • Qualified identity: The input yields an authenticated identity and identifies the credential authority or client-registration context that qualifies it. That qualified identity keys the Identity Binding (Section 5.3.6).

  • Credential authority: For workload evidence, the IdP relies on the credential mechanism having authorized issuance for the asserted workload identity. A caller-supplied subject or agent identifier alone MUST NOT establish that identity. For dedicated clients, the IdP relies on the configured client-authentication method and approved binding.

  • Proof semantics: The input states whether it is bearer evidence or binds a key, and what that proof establishes (Section 5.3.4).

Credential acquisition is outside this profile. Audience validation follows each input's credential specification and section; there is no universal IdP audience.

This document defines the two inputs below; [INPUTS] defines further inputs. Input support follows Section 9.1; resolution mode selection and rejection follow Section 5.3.5.

Table 6: Agent-resolution inputs and qualified identities
Input Qualified identity Reference
Dedicated client Trusted assertion issuer and exact client sub Section 5.3.2
Existing platform JWT Approved issuer, exact sub, and configured additional selectors Section 5.3.3

The IdP client-registration context qualifies a dedicated client's identity. The existing platform JWT uses presented-evidence mode; the dedicated client uses authentication-context mode.

5.3.2. Dedicated Client Identity

In this explicitly configured mode, the IdP resolves the client identity validated during client authentication to its explicitly bound Agent Principal. No separate platform-issued credential is needed. The assertion authenticates the client and is not independent workload evidence. This mode does not distinguish agents behind one shared client identity. Such a client MUST use a supported workload-identity input that distinguishes its agents (Section 5.3.3). Appendix A.1.1 illustrates this input.

  • Presentation: An asymmetrically signed client_assertion under [RFC7523]. For private_key_jwt, the common method, the assertion issuer and subject are the client's registered identifier (Section 9 of [OPENID]); other configured asymmetric RFC 7523 methods MAY be supported.

  • Validation: The IdP authenticates the client under Section 3 of [RFC7523] and its configured authentication method. It MUST use verification keys authorized for that client and assertion issuer. Assertion-supplied keys or issuer claims MUST NOT establish trust.

  • Resolution: The IdP MUST resolve the exact validated (iss, sub) in its client-registration context under Section 5.3.6. An additional agent claim in a self-signed client assertion MUST NOT select another Agent Principal under this input.

  • Audience: RFC 7523 client authentication at the IdP and the RAS MUST follow Section 4 of [RFC10070]: aud has the authorization server's issuer identifier as its sole value, never its token endpoint URL, and the server rejects any other audience. This profile adds no alternative audience configuration and leaves other credential classes' audience rules unchanged.

  • Proof: Assertion signing neither binds the grant to the signing key nor establishes an attested runtime identity. Grant proof processing follows Section 4.4 independently, and the DPoP key MAY differ from the client-authentication key. An assertion carrying cnf MUST NOT be accepted unless its configured authentication method defines and validates the corresponding proof.

  • Replay: These rules narrow the base specifications and prohibit negotiated assertion reuse. The assertion MUST contain a jti. The IdP and the RAS MUST each reject reuse in another request while the assertion remains acceptable; a reused assertion fails client authentication. Replay identifiers MUST be qualified by the validated issuer and client.

  • Retry: For any retry of a dedicated-client token request at either server, including after a use_dpop_nonce challenge under Section 8 of [RFC9449], the client MUST generate a new client_assertion with a fresh jti. For a nonce retry, the client MUST also generate a fresh DPoP proof containing the supplied nonce while retaining the grant proof key. A new DPoP proof alone is not enough, because the server may already have consumed the previous assertion during authentication.

5.3.3. Existing Platform JWT

This common shared-client input accepts existing signed platform JWTs as issued, with no new media type or reissuance. Section 9.1 states when it is required, and Appendix A.2.1 gives an AWS STS example. The IdP MUST accept a platform JWT only when its issuer, credential class, and the authenticated client are explicitly configured together. Credential classification and rejection follow Section 5.3.5.

  • Configuration: Configuration MUST also specify:

    • the credential class: the rule distinguishing workload credentials from user, management-API, or other tokens of the same issuer, namely an explicit typ, a dedicated issuer, or an accepted audience combined with exact selectors;

    • approved keys or an approved HTTPS JWK Set URI under [RFC7517], retrieved with server authentication;

    • the issuer's permitted asymmetric algorithms;

    • the effective evidence deadline, the permitted clock skew for a future issuance time, and any maximum age; and

    • the audiences that authorize presentation to this IdP as workload evidence.

  • Presentation: actor_token in delegated issuance and subject_token in self-acting issuance (Section 5.7.1); the client authenticates separately with a configured method. An accepted JWT MUST NOT be treated as OAuth client authentication unless it independently satisfies a configured client authentication method.

  • Validation: The IdP MUST validate the JWT under [RFC7519], [RFC8725], and the configured credential profile. Keys or URLs in the JWT MUST NOT override the approved key source. The IdP MUST determine the effective evidence deadline from exp, a configured maximum age measured from an authenticated issuance time (such as iat), or both. When both apply, the earlier deadline governs. Receipt time MUST NOT substitute for issuance time. The deadline bounds grant expiration (Section 5.5).

  • Resolution: The Identity Binding MUST specify an exact issuer and sub. It MAY require additional string values from the JWT Claims Set, including nested claims. Selectors constrain identity resolution, not the administrative configuration format. Additional selectors MUST use the JSON Pointer string representation in Section 5 of [RFC6901], evaluated from the Claims Set root under Section 4 of [RFC6901]:

    • Every selector MUST resolve unambiguously to a string equal to its configured value, without type conversion, case folding, or Unicode normalization. Missing paths, evaluation errors, non-string values, or unequal values MUST prevent that binding from matching.

    • Selectors MUST NOT use wildcard, prefix, or pattern matching, and MUST NOT replace the exact issuer and sub checks.

    • A caller-controlled claim MUST NOT distinguish agents unless trusted issuance policy constrains its values to identities the caller is authorized to assert. A signature alone does not establish that authority for request tags or other caller-supplied attributes.

  • Audience: The configured audiences authorize presentation to this IdP as workload evidence (Configuration). The IdP MUST reject a platform JWT whose aud is absent or contains none of them.

  • Proof: This profile defines no new proof mechanism. If cnf is present, the IdP MUST enforce its proof mechanism and MUST NOT give the credential bearer treatment when the binding is unsupported. A deployment accepting key-bound JWTs MUST configure their proof validation and any required relationship to the grant proof key. Bearer platform JWTs fall under Section 5.3.4.

  • Failure: The IdP MUST reject evidence with invalid_request if a required time limit cannot be evaluated or no effective evidence deadline can be determined.

5.3.4. Bearer Evidence Limits

Where issuer endorsement of the proof key is required, the deployment needs a supported input that cryptographically binds the key, such as the Client Attestation or WIT-SVID input of [INPUTS]. DPoP co-presented with bearer JWT-SVID or unbound platform JWT evidence establishes possession only. DPoP MUST NOT substitute for a credential proof that the selected input requires. Section 12.4 describes what bearer evidence still exposes.

5.3.5. Agent Resolution Input Validation

Mode selection: After client authentication, the IdP MUST determine the resolution mode from trusted configuration for the authenticated client, applicable profile, and target. If that configuration does not establish an unambiguous mode, it MUST reject the request with invalid_request. The presence or absence of actor-token parameters MUST NOT select or change that mode.

  • Authentication-context resolution: The IdP MUST use the identity validated during client authentication for this token request under the configured input in Section 5.3.1. Client-supplied identity hints and context from another request or session MUST NOT substitute for that identity. The credential class MUST match the authentication method. The client MUST omit actor_token and actor_token_type. The IdP MUST reject either parameter with invalid_request, including a duplicate authentication credential.

  • Presented-evidence input: In delegated issuance, the IdP MUST require both actor_token and actor_token_type, and the type MUST be urn:ietf:params:oauth:token-type:jwt (Section 5.8). In self-acting issuance, the evidence is the subject token (Section 5.7.1). Validate the separate platform JWT under Section 5.3.3. Missing or rejected evidence MUST NOT trigger resolution from authentication context.

Credential class: The IdP MUST select exactly one configured platform credential class for presented evidence, or reject with invalid_request. An input that resolves from authentication context, including SPIFFE SVIDs and Client Attestations ([INPUTS]), MUST NOT be accepted through presented-evidence mode. Credential classes MUST have mutually exclusive validation rules under Section 3.12 of [RFC8725]. Within one token request, rejection under the selected class's validation or authorization rules MUST NOT trigger validation under another class.

Inbound actor chain: To preserve the single user-to-agent relationship, the IdP MUST reject an agent-resolution JWT or ID Token containing act, and a refresh-token subject whose retained authorization contains an actor chain.

5.3.6. Identity Binding

Resolution: After validating the configured resolution input, the IdP MUST:

  • Resolve the exact qualified client or workload identity (Section 5.3.1) to one active Agent Principal through an enabled Identity Binding; reject missing, ambiguous, or disabled mappings.

  • Apply exact resolution even when client authentication permits a prefix match. A client identifier, including a [CIMD] URL, identifies the client, not the agent.

Similar names, unqualified identifiers, or a shared signing key MUST NOT establish identity equivalence. An identifier of one execution, such as a process, replica, or container, MUST NOT select or change the Agent Principal (Section 3.4).

A client instance identifier ([INSTANCE]) MUST NOT satisfy a Client Association. It MUST NOT select or change the Agent Principal except through installation-level resolution that an input profile defines with all of the following:

  • an exact Identity Binding naming the identifier and its attester, client, and receiver scope;

  • an attester configured to assign the identifier at Installation granularity (Section 1.1 of [INSTANCE]), under the continuity rules of Section 6 of [INSTANCE];

  • a resolution level selected only by trusted configuration, with no fallback between levels; and

  • no continuity inferred across identifiers or attesters.

[INPUTS] defines such resolution for Client Attestation.

Disabling: An Identity Binding can be disabled independently of the Agent Principal and its other bindings. A disabled binding MUST NOT authorize new grant issuance. Disabling a binding does not itself revoke outstanding tokens; their treatment follows Section 12.8.

Client Association: Before issuing a governed grant, the IdP MUST verify that a Client Association permits the authenticated client to use the selected Identity Binding, with the selected credential class, for the requested acting relationship (Section 2.2). The IdP MUST NOT substitute the client's identity for the resolved actor.

Association permissions have these limits:

  • Permission for delegated issuance does not imply self-acting issuance, nor the reverse.

  • A Client Association can authorize several Identity Bindings. Authorization of one binding, a credential authority, a credential class, or the Agent Principal itself MUST NOT imply authorization of another binding unless the association's policy explicitly includes it.

Policy representation and evaluation mechanisms are outside this profile (Section 10.1).

5.4. Issuance Authorization

Validated identity does not grant authority. After resolution under Section 3.2, Section 5.3, and, for delegated access, Section 5.6.3, the IdP MUST authorize issuance under current assignments and policy for the resolved agent, authenticated client, acting relationship, Governance and Target Tenants, RAS, resource, and requested authority. The authority asserted in a delegated grant MUST be bounded by both:

  • The authority the IdP is authorized to assert for the user.

  • The authority permitted by the agent's delegation authorization (Section 3.6.2).

For a self-acting grant, the asserted authority MUST be bounded by the Agent Authorization (Section 3.6.1).

Issuance and denial follow these rules:

  • The IdP MAY narrow scope, reflecting the result in the grant and response under [RFC8693]. If no scope can be granted for delegated issuance, it MUST reject with actor_unauthorized when no applicable Delegation Authorization covers the agent, user, client, and target, or when policy categorically prohibits the agent for the requested scope, and otherwise with invalid_scope, as when an applicable authorization's scope ceiling excludes the request (Section 6.6.2 of [ACTOR-PROFILE]). For self-acting issuance, it MUST return the errors of Section 5.8.

  • The IdP MUST NOT issue by dropping a required actor or binding, substituting an external identifier for the Agent Principal, or weakening proof requirements.

  • Denied delegation MUST NOT fall back to self-acting access.

Before issuance, the IdP MUST apply current binding and authorization policy and reject an inactive agent or withdrawn binding once the change has been applied. The IdP MUST apply such a change within a configured freshness limit on cached policy data.

If IdP approval requires a downstream lifetime condition that the selected composition cannot enforce, the IdP MUST reject issuance with actor_unauthorized for delegated issuance or invalid_target for self-acting issuance. It MUST NOT discard that condition or treat a shorter grant lifetime as enforcing it. Revocation follows Section 12.8.

5.5. Common Grant Claims, Lifetime, and Response

Each grant carries these claims in addition to those of its own section (Section 5.6.5, Section 5.7.2):

Table 7: Claims common to both grants
Claim Required result
client_id The client's registration identifier at the RAS, derived under Section 5.1
resource The authorized resource URI, issued as a JSON string
scope Non-empty authorized scope string, no broader than the approved request
cnf.jkt Thumbprint of the grant proof key when DPoP is used at issuance; REQUIRED for bound governed agent access (Section 4.4)
exp, iat, jti As in Section 3.1 of [ID-JAG], within the lifetime limits below

Lifetime: A grant has these limits:

  • Configured limit: The grant lifetime SHOULD be at most five minutes and MUST NOT exceed the configured lifetime limit.

  • Agent-resolution input: The grant MUST NOT outlive the validated resolution credential, using the bound in the following table or in the input's profile. The dedicated-client assertion is the exception: it MUST be valid when the request is authenticated, but it authenticates one transaction and does not cap the grant.

Table 8: Grant lifetime bound by agent-resolution input
Input Lifetime bound on the grant
Dedicated client assertion None (the exception above)
Platform JWT The effective evidence deadline in Section 5.3.3

The ID-JAG is also limited by its subject credential (Section 5.6.5).

Response: The response follows Section 4.3.4 of [ID-JAG]; for a WAG, issued_token_type is the WAG token type. For a bound grant, the client MUST retain the DPoP key for redemption and SHOULD inspect the grant to confirm that cnf.jkt identifies that key (Section 9.11.1.1 of [ID-JAG]).

5.6. Delegated Issuance: ID-JAG

5.6.1. Request

The client sends the token exchange request of Section 4.3 of [ID-JAG] with the common parameters and rules of Section 5.2. The following parameters are REQUIRED except where the resolution mode specifies otherwise:

Table 9: ID-JAG token exchange parameters
Parameter Value
requested_token_type urn:ietf:params:oauth:token-type:id-jag
subject_token User subject credential issued for the authenticated client (Section 5.6.2)
subject_token_type urn:ietf:params:oauth:token-type:id_token, urn:ietf:params:oauth:token-type:saml2, or urn:ietf:params:oauth:token-type:refresh_token
actor_token Omitted for authentication-context resolution; REQUIRED for a presented-evidence input under Section 5.3.5
actor_token_type Omitted when actor_token is omitted; REQUIRED, with value urn:ietf:params:oauth:token-type:jwt, whenever actor_token is present

5.6.2. Subject Token Validation

The IdP MUST support ID Token subjects, MAY support SAML 2.0 assertion subjects, and MAY support its own refresh tokens when agreed in client configuration, validating each under Section 4.3.3 of [ID-JAG]:

  • SAML 2.0 assertion: The IdP MUST map the assertion's Audience to the authenticated client under Section 4.5 of [ID-JAG] and resolve the subject under Section 3.2 of [ID-JAG].

  • Refresh token: The IdP MUST establish that the refresh token's retained authorization permits the requested target and authority. Possession of a refresh token or an offline_access grant alone MUST NOT establish that permission. That authorization can include an explicitly associated cross-domain delegation authorization, represented and provisioned locally by the IdP. OpenID Connect scope names do not themselves map to resource-specific permissions. Any binding retained with the refresh token MUST be enforced rather than bypassed by selecting another agent-resolution input, with conflicts rejected as invalid_grant.

Also required: Every subject input requires a current validated agent-resolution input and delegation authorization under Section 3.6.2. User access tokens are not subject inputs (Appendix B.3). JWT encoding alone does not make an access token an ID Token.

5.6.3. Subject Resolution

Subject identifiers, tenant relationships, aud_sub, aud_tenant, and sub_id follow Sections 3.1, 5, and 6 of [ID-JAG], with these additions.

The IdP MUST:

  • Resolve exactly one user from the ID Token's issuer-qualified subject or the SAML assertion's issuer-qualified NameID and tenant context, or from the validated refresh token's authorization context. The actor credential and authenticated client MUST NOT substitute for that identity.

  • Select the subject namespace of the target RAS's SSO relationship. A client-specific pairwise subject MUST NOT be copied into another relying party's namespace without resolving the same user there.

  • Derive aud_sub, aud_tenant, or sub_id, when used, from an authoritative association for the target, never from a client-supplied account hint.

  • Reject issuance for a disabled user or missing, ambiguous, or conflicting resolution (Section 4.7).

5.6.4. Actor Resolution and Construction

In delegated issuance, both resolution modes proceed through this section, and a governed request MUST result in the required governed act or fail. Omitting actor-token parameters in authentication-context mode does not request ordinary EMA or subject-only impersonation.

After credential validation, the IdP MUST resolve the agent under Section 5.3 and authorize issuance under Section 5.4 and Section 3.6.2. The ID-JAG MUST contain one act object with:

  • sub: the Agent Principal identifier from the Identity Binding.

  • iss: this IdP's issuer identifier.

These values MUST come from the approved mapping, even when source and governed identifiers coincide. For presented-evidence inputs this replaces credential-to-actor copying in Section 6.4 of [ACTOR-PROFILE].

The object MUST follow Section 3.4 of [ACTOR-PROFILE], including its sub_profile recommendation and unclassified-actor rules. Any sub_profile MUST reflect the IdP's authoritative classification. Being an Agent Principal does not itself establish the ai_agent classification of [ENTITY-PROFILES].

5.6.5. Grant Issuance

Claims: The ID-JAG MUST use the format and claims of Section 3.1 of [ID-JAG] and the common claims of Section 5.5, and additionally satisfy:

Table 10: ID-JAG subject, actor, and tenant claims
Claim Required result
sub Same user as the validated subject credential, expressed in the IdP's subject namespace for the RAS
act Agent Principal actor constructed under Section 5.6.4
tenant At a multi-tenant issuer, the user's tenant (Section 6.1 of [ID-JAG]), which is also the agent's Governance Tenant (Section 3.3)

Unambiguous context: The IdP MUST NOT issue a grant if it cannot determine an unambiguous user, actor, downstream client, or tenant relationship.

Lifetime: The limits of Section 5.5 apply. The grant's expiration also MUST NOT exceed the subject credential's expiration, which is:

  • ID Token: its exp claim.

  • SAML assertion: the earliest applicable NotOnOrAfter in the assertion's Conditions and the SubjectConfirmationData used to validate the subject. If neither supplies an expiration bound, the IdP MUST reject the subject as invalid_request.

  • Refresh token: its expiry, if the IdP records one. Otherwise the configured and agent-resolution input limits apply; absence of a recorded expiry does not authorize an unlimited grant lifetime.

5.7. Self-Acting Issuance: WAG

Self-acting issuance is one token exchange with two resolution modes. The relationship and downstream client rules of Section 5.1 and the client authentication and algorithm rules of Section 4.5 apply. The IdP MUST:

  1. Authenticate the client and validate the resolution input under Section 5.3.1 and Section 5.3.5, as presented under Section 5.7.1.

  2. Resolve the Agent Principal through an active Identity Binding (Section 5.3.6) from the configured input: the workload credential presented as the subject token, or the authenticated client identity.

  3. Verify the Client Association for self-acting issuance (Section 5.3.6).

  4. Authorize issuance under Section 5.4, applying Agent Authorization (Section 3.6.1) for the requested RAS, resource, and authority. No user is involved.

  5. Apply Section 4.4 and issue the WAG under Section 5.7.2.

Failures: Section 5.8.

The client redeems the WAG under Section 6.1, and the RAS processes it under Section 6.5; Appendix A.1.6 shows the messages.

5.7.1. Issuance Request

Token exchange is used because only its issued_token_type ([RFC8693]) labels the output as an assertion for another token endpoint. The request carries the common parameters and rules of Section 5.2 and the parameters below, which are REQUIRED except where the table or the resolution mode specifies otherwise. The subject token carries the agent-resolution input and is not processed under Section 5.6.2.

Table 11: WAG token exchange parameters
Parameter Value
requested_token_type urn:ietf:params:oauth:token-type:wag (Section 5 of [WAG])
subject_token, subject_token_type Per resolution mode, below
actor_token, actor_token_type MUST be absent

Mode selection: Configured under Section 5.3.5.

Presented-evidence resolution: The workload credential is the subject token, with subject_token_type urn:ietf:params:oauth:token-type:jwt. The client authenticates separately. The existing platform JWT (Section 5.3.3) is presented this way. The presented-evidence, classification, and mutual-exclusion rules of Section 5.3.5 apply to that subject token.

Authentication-context resolution: The authentication-context rules of Section 5.3.5 apply. In this mode:

  • [RFC8693] cannot name the authenticated client as the subject without a subject token. A client authenticated with a JWT therefore MUST repeat that JWT, byte for byte, as subject_token with type urn:ietf:params:oauth:token-type:jwt. That JWT is the credential itself: the RFC 7523 assertion or, for the inputs of [INPUTS], the JWT-SVID, the WIT-SVID, or the Client Attestation JWT, not an accompanying proof-of-possession JWT.

  • The IdP MUST reject a subject token that is not byte-identical to the credential presented for authentication. This prevents a client from substituting another party's assertion as the subject.

  • Carrying one assertion in both parameters does not violate the single-use jti rule of Section 5.3.2.

  • A client authenticated by X.509-SVID over mutual TLS presents no JWT and has no self-acting issuance under this profile; a SPIFFE workload that needs self-acting access can authenticate with a JWT-SVID ([INPUTS]).

5.7.2. Grant Claims

The WAG subject identifies the governed Agent Principal, not the credential subject from which it was resolved. The grant is a JWT with typ oauth-wag+jwt (Section 5.1 of [WAG]) whose claims are aligned with the claim set of that section: the common claims of Section 5.5 and the following:

Table 12: WAG issuer, subject, audience, and tenant claims
Claim Value
iss The IdP issuer identifier
sub The Agent Principal identifier from the Identity Binding
aud The target RAS issuer identifier
tenant At a multi-tenant issuer, the agent's Governance Tenant (Section 3.3)

The WAG MUST NOT contain act. A nickname claim, if present, is for display only; it is not an input to agent correlation or authorization (Section 10 of [WAG]).

Unambiguous context: The IdP MUST NOT issue a WAG unless the Agent Principal, downstream client, and tenant are unambiguous.

Lifetime: The limits of Section 5.5 apply.

5.8. Issuance Errors

In addition to Section 4.7, the IdP uses these errors:

Table 13: Request errors
Failure Error
Unsupported or invalid requested authorization details invalid_authorization_details (Section 8 of [RFC9396])
Unsupported input combination, ambiguous credential classification, or unsupported actor_token_type in presented-evidence mode invalid_request
No unambiguous configured resolution mode, or missing actor-token parameters in presented-evidence mode invalid_request; no mode fallback
Actor-token parameters in an authentication-context mode, or a method inconsistent with that mode invalid_request; no mode fallback
Table 14: Identity resolution and delegation errors
Failure Error
Invalid subject or agent-resolution credential, or disallowed inbound actor chain invalid_request
Absent, disabled, or ambiguous Identity Binding, or no active Agent Principal can be resolved invalid_grant
Governance Tenant cannot be resolved unambiguously from trusted identity and configuration context invalid_grant
Resolved Agent Principal, but no Client Association permits the selected binding for delegated issuance actor_unauthorized under Actor Profile, with HTTP 400
No applicable Delegation Authorization covers the agent, user, client, and target, or policy categorically prohibits the agent for the requested scope (Section 5.4) actor_unauthorized
Policy does not authorize the agent's Governance Tenant for the Target Tenant (Section 5.4), a relationship local policy prohibits (Section 6.6.2 of [ACTOR-PROFILE]) actor_unauthorized
At a multi-tenant issuer, the agent's Governance Tenant is not the user's tenant (Section 3.3) actor_unauthorized
An applicable Delegation Authorization's scope ceiling excludes the requested scope invalid_scope
Approval requires a downstream lifetime condition that the selected composition cannot enforce, in delegated issuance (Section 5.4) actor_unauthorized

Subject and agent-resolution credential failures use invalid_request, as Section 2.2.2 of [RFC8693] requires and Section 4.3.4.3 of [ID-JAG] profiles. A valid credential that resolves no active Identity Binding, Agent Principal, or Governance Tenant, or no user, uses invalid_grant (Section 4.7).

Self-acting issuance adds these errors:

Table 15: Self-acting issuance errors
Failure Error
Actor-token parameters present in a self-acting exchange invalid_request
Subject token is not byte-identical to the authentication credential in authentication-context resolution invalid_request
Resolved Agent Principal, but no Client Association permits self-acting issuance for the binding unauthorized_client, not actor_unauthorized, since no actor is asserted
Agent not authorized for the requested RAS or resource, including when policy does not authorize its Governance Tenant for the resource's Target Tenant invalid_target
Agent not authorized for the requested authority invalid_scope
Approval requires a downstream lifetime condition that the selected composition cannot enforce (Section 5.4) invalid_target

6. Grant Redemption at the RAS

6.1. Redemption Request

The client redeems either grant at the RAS token endpoint: an ID-JAG as in Section 4.4 of [ID-JAG], and a WAG as in [WAG]. A grant containing cnf is redeemed with the grant type urn:ietf:params:oauth:grant-type:jwt-dpop ([JWT-DPOP-GRANT]), and a grant without cnf with the JWT bearer grant type, urn:ietf:params:oauth:grant-type:jwt-bearer. The request includes the proof required by Section 4.4 and the applicable access-token protection. These additional parameters are REQUIRED unless marked OPTIONAL:

Table 16: Redemption request parameters
Parameter Value
resource Exactly one parameter whose value equals the grant's resource URI
scope OPTIONAL subset of the grant's scope; if omitted, the grant's scope is the upper bound

A grant containing cnf presented with jwt-bearer is rejected with invalid_grant, whether or not the request carries a DPoP proof (Section 5.2 of [JWT-DPOP-GRANT]).

6.2. Common Grant Validation

Both grants use these checks. Section 6.4.1 and Section 6.5 each apply them at the step that names them:

  1. Proof and client: Enforce Section 4.4, including the configured minimum profile even when cnf is absent, and independently authenticate the client identified by client_id.

  2. Authority:

    • Resource claim: Require resource to be one URI, encoded as a JSON string or a single-element JSON array (Section 3.1 of [ID-JAG]), and normalize it to that URI. Reject a missing or invalid value, an empty array, or a multi-element array with invalid_grant.

    • Requested resource: The RAS MUST reject multiple resource parameters, or a requested resource different from that URI, with invalid_target under Section 2 of [RFC8707].

    • Scope: Require the grant's scope claim to be a non-empty string. Reject a missing, empty, or non-string claim with invalid_grant. A supplied request scope MUST be a non-empty subset of that claim, or the RAS MUST return invalid_scope.

    • Authorization details: Apply ID-JAG's processing for authorization_details. Reject the grant with invalid_grant if its authority extends beyond that resource.

Grant replay: The RAS accepts a grant when every check required for issuance has passed and it issues an access token, or when every check required for admission to deferral has passed and it records a pending governed redemption ([OVERSIGHT]). A grant is accepted only once when it has no enforced grant-level sender constraint, when the RAS admits it to deferral, or when it is bound and no explicit policy lets the RAS accept it again. For such a grant, the RAS MUST record its (iss, jti) as accepted atomically with that commitment, so that of concurrent presentations at most one is accepted. A request rejected before acceptance MUST NOT record the grant as accepted or change an existing record, so a client can correct the request, such as a missing proof or a wrong resource, and present the same grant again. For a grant without an enforced grant-level sender constraint, the RAS MUST reject a grant whose validated (iss, jti) it has already accepted while that grant remains acceptable. A proof used only for client authentication or access-token binding is not such a constraint. The RAS MAY accept a bound grant again under explicit policy, each time with a fresh proof that matches its cnf.jkt (Section 4.4). This applies to unbound ID-JAGs the single-use option of Section 4.4.4 of [ID-JAG] in place of re-submission, and settles for the WAG the replay question that Section 9 of [WAG] leaves open. The retention rule of Section 4.6 applies to accepted identifiers.

6.3. Agent Principal Correlation

The Agent Principal identity is the pair of IdP issuer and agent identifier, carried as (act.iss, act.sub) in an ID-JAG and as (iss, sub) in a WAG. The RAS MUST:

  • Resolve that qualified identity independently of any user identity; a bare subject, display name, or OAuth client identifier MUST NOT replace it.

  • Deny authorization that depends on a missing agent record, whether that record is provisioned in advance or created just in time under Section 6.3.1.

A changed Identity Binding or local agent link MUST NOT transfer an existing delegation to a different agent.

The IdP or an authorized directory connector can provision local agent principals, keyed by the same pair. No provisioning protocol is required ([GUIDE]). Once deactivation is applied, the RAS enforces Section 8.3.

6.3.1. Optional Just-in-Time Correlation

Where the RAS requires a local agent record and none exists for the qualified pair in the authorized Target Tenant, resource policy MAY permit the RAS to create one from a validated grant. The policy is disabled by default and enabled per governing issuer, or per issuer and tenant at a multi-tenant issuer (Section 3.3), and Target Tenant. When it applies, the RAS:

  • MUST key the created record by that exact pair, creating one record for the pair even under concurrent requests;

  • MUST give the created record a local principal that no other qualified pair maps to, so agents of two issuers with one identifier remain two principals;

  • MUST NOT attach the pair to an existing record by name or other descriptive match;

  • MUST apply local restrictions, retained revocation state under Section 8.3 (which includes a correlation the RAS has removed, so creating the record again does not undo a removal), and local policy before issuance; and

  • sets the record's initial eligibility by local policy; a record created ineligible denies the triggering request with invalid_grant (Section 6.9).

Creating the record is correlation, not authorization. Resource policy still applies, and for delegated access so does the actor gate (Section 3.6.4). Creation does not substitute for propagating disablement, because a grant does not carry the IdP's administrative status. Without provisioning, the RAS learns of disablement only through local action or another signal (Section 12.8). [AGENT-LIFECYCLE], not this document, defines provisioning and reconciliation of a created record for resource domains that conform to it.

6.4. Delegated Redemption: ID-JAG

6.4.1. Grant Validation

The RAS MUST perform ID-JAG validation and additionally:

  1. Actor: Require a single act object under Actor Profile's rules, with non-empty iss and sub and no nested act. Require act.iss to equal the ID-JAG issuer and configured trust to authorize assertion of that namespace, in the grant's tenant at a multi-tenant issuer (Section 3.3).

  2. Proof and client: Apply the proof and client checks of Section 6.2.

  3. Replay: Apply the grant replay rule of Section 6.2.

  4. Authority: Apply the authority checks of Section 6.2.

  5. Local authorization: Resolve the user under Section 6.4.2 and the Agent Principal actor under Section 6.3, and apply current RAS policy to the user/actor relationship under Section 3.6.4, client, tenant, and resource. A valid grant sets an authority ceiling; it does not require issuance.

6.4.2. User Resolution and Linking

Subject identifiers, tenant relationships, aud_sub, aud_tenant, and sub_id follow Sections 3.1, 5, and 6 of [ID-JAG], with these additions. After validating the ID-JAG and its client and proof bindings, the RAS MUST:

  • Resolve exactly one local user in the authorized Target Tenant, qualifying sub by the validated IdP issuer, by tenant at a multi-tenant issuer (Section 6.3 of [ID-JAG]), and by the tenant relationship; IdP and RAS tenant identifiers are not interchangeable.

  • Use aud_sub only when the IdP is authorized to assert local account identifiers for that Target Tenant, and MUST NOT use it to override a conflicting approved link.

  • Reject conflicting identifiers or multiple local matches without retrying a weaker selector or another tenant.

  • Resolve act.iss and act.sub separately under Section 6.3; acting for a user does not link the agent to the user's account.

User-account links have these constraints:

  • Authority: A link between an external user and a local account MUST rest on an authoritative association, not on email, username, or display-name equality alone.

  • Uniqueness: Each qualified external identity MUST resolve to at most one local account per Target Tenant.

  • Continuity: A link change MUST NOT transfer an outstanding grant or delegation to another user.

  • Failure: The RAS MUST reject issuance for a disabled user or missing, ambiguous, or conflicting resolution (Section 4.7).

6.4.3. Actor Preservation

The RAS MUST preserve the complete validated act object, including iss, sub, and any sub_profile, in the access token or its introspection context under Section 3.6.2.2 of [ACTOR-PROFILE]. Preservation applies to JSON members and values, not to serialization, whitespace, or member order. The RAS:

  • MUST NOT add, remove, or rewrite actor members.

  • MUST NOT translate act.sub to its local agent-principal identifier or replace act.iss with its own issuer.

6.5. Self-Acting Redemption: WAG

Processing: The RAS MUST:

  1. Grant: Validate the grant under [RFC7523], with the claims of Section 5.7.2. Require the JWT typ header parameter oauth-wag+jwt (Section 6.1 of [WAG]), so that an ID-JAG or another JWT from the same issuer cannot be accepted as a WAG. Require iss to be a configured governing IdP for the asserted agent namespace, and at a multi-tenant issuer apply the tenant rule of Section 3.3. Reject a WAG that contains act with invalid_grant.

  2. Proof and client: Apply the proof and client checks of Section 6.2.

  3. Replay: Apply the grant replay rule of Section 6.2.

  4. Authority: Apply the authority checks of Section 6.2.

  5. Correlation: Resolve the pair (iss, sub) under Section 6.3 to one local agent principal in the authorized Target Tenant. The RAS MUST have that authorized correlation before issuance. It is provisioned in advance or, where resource policy permits, created just in time from the WAG (Section 6.3.1), so a RAS can accept a previously unseen agent's first WAG as Section 3 of [WAG] describes; creating the record does not authorize the agent.

  6. Policy: Apply current RAS policy for the agent, client, tenant, and resource. A valid grant sets an authority ceiling; it does not require issuance.

  7. Output: Issue an access token under Section 6.6 and Section 6.7, with the local agent principal as sub and no act. The RAS MUST NOT issue a refresh token for a WAG redemption.

6.6. Access Token Issuance and Response

After validation and authorization, the RAS MUST issue an access token with these claims under [RFC9068], or equivalent context through Section 6.8:

  • Identity: For delegated access, the resolved user as subject and the validated act unchanged under Section 6.4.3. For self-acting access, the local agent principal as subject and no act (Section 6.5).

  • Authority: Redeemed resource as audience and non-empty authorized scope (otherwise invalid_scope), without broadening authority.

  • Protection: The binding selected under Section 6.7.

  • Tenant: By default, the tenant-specific resource URI, which becomes the audience under Section 3 of [RFC8707]. A deployment MAY instead carry the Target Tenant in a configured claim that names it, or in authoritative token context. The grant's tenant, an issuer tenant (Section 3.3), is not that claim.

  • Authorization details: Effective authorization_details, when used, in the JWT claim or introspection member under Section 9 of [RFC9396]. Narrowing or translating authorization MUST NOT discard restrictions in those details or expand the approved authority.

  • Expiration: Within RAS-local lifetime policy under Section 3.6.3 and any applicable refresh-authorization limit.

Response: The response follows Section 4.4.2 of [ID-JAG]. The client MUST reject an output that does not satisfy its configured protection requirement.

Instance context: When the client authenticates at redemption with a Client Attestation validated under [INSTANCE], the RAS MAY include instance context for that presenting instance under Section 7 of [INSTANCE]. The RAS MUST NOT copy or remap instance context from the ID-JAG or WAG. Instance context identifies an execution of the client; it is not an actor, and it does not replace act, sub, or client_id.

Whether the response also carries a refresh token, and how that token is bound and used, follows Section 8.2.

6.7. Access-Token Protection

Selection: The RAS MUST issue a sender-constrained access token unless the resource is explicitly configured to permit bearer tokens. The permitted protection is selected through trusted client and resource configuration before issuance, not by a request flag. A validation failure MUST NOT trigger a weaker mode.

  • DPoP or bearer: Where the effective client and resource configuration leaves a choice only between DPoP and bearer tokens, the RAS MUST bind the access token to the key of a valid DPoP proof presented at redemption. Under that configuration, the RAS issues a bearer token only when no proof is presented.

  • Mutual TLS: Where the effective client and resource configuration selects mutual TLS, mutual TLS applies regardless of any DPoP proof, including the grant proof required below.

A proof never selects a protection that configuration does not permit. When a grant without cnf is redeemed without the proof that the access-token protection of the grant's resource requires, a DPoP proof or, for mutual TLS, the client certificate, the RAS MUST reject the request with invalid_grant (Section 9.11.1.2.4 of [ID-JAG]), for a WAG as for an ID-JAG. That refusal is one of the grant's checks, reported before replay and authority failures (Section 6.9.1). The RAS selects access-token protection only after the proof checks succeed, so a bound grant redeemed without its proof fails as Section 4.4 specifies, with invalid_grant or invalid_dpop_proof, whatever protection the resource requires.

Table 17: Access-token protection modes
Selected protection Access token
DPoP cnf.jkt identifies the validated redemption proof key, which also matches the grant binding when present
Mutual TLS cnf.x5t#S256 identifies the client certificate validated at redemption; the response uses token_type=Bearer
Bearer No cnf

For mutual TLS with a bound grant, the client MUST also prove possession of the grant's DPoP key in the same redemption request. Certificate possession alone does not redeem the grant. The access token then carries cnf.x5t#S256 but not cnf.jkt, as Section 5 of [RFC9449] allows for access tokens that are not DPoP-bound. Receipt of the grant proof does not override the configured access-token protection. A native mutual-TLS-bound grant is future work (Appendix B.3).

Enforcement: The RAS MUST NOT copy the grant's cnf into an access token whose binding will not be enforced. Clients and APIs MUST NOT treat a constrained token as an unconstrained bearer token or bypass an unrecognized confirmation method.

6.8. Optional Opaque Access Tokens and Introspection

The RAS MAY issue an opaque access token instead of a JWT when the API obtains equivalent context through token introspection [RFC7662]. For an active token:

  • Identity and authority: The response MUST carry sub, aud, scope, client_id, and, for delegated access, the validated act object unchanged, as the act introspection member registered by Section 7.5 of [RFC8693].

  • Context: The response MUST preserve the Target Tenant representation and any effective authorization_details required by Section 6.6.

  • Protection: For a bound token, the response MUST carry cnf with jkt under Section 6.2 of [RFC9449] or x5t#S256 under Section 3.2 of [RFC8705].

An introspection call that does not return a JSON object with a boolean active member does not complete token validation. That includes a transport failure, a timeout, and an error response from the introspection endpoint (Section 2.3 of [RFC7662]), including one that rejects the API's own credentials: none says anything about the token, so Section 7.6 applies. A response with active set to false, or an active response that fails Section 7.2, establishes that the token is invalid. A cached active response used within the limits of Section 7.2 completes the check.

6.9. Redemption Errors

In addition to Section 4.7 and the checks of Section 6.2, the RAS uses these errors:

Table 18: Redemption errors
Failure Error
Invalid ID-JAG invalid_grant
Unbound grant whose (iss, jti) the RAS already accepted invalid_grant
Grant without cnf, redeemed without the proof that its resource's access-token protection requires (Section 6.7) invalid_grant
ID-JAG whose act agent has no authorized correlation at the RAS, or is subject to an applied disablement, correlation removal, or local restriction (Section 8.3) invalid_grant
WAG whose sub has no authorized correlation at the RAS, or is subject to an applied disablement, correlation removal, or local restriction invalid_grant
Invalid WAG, including one without typ oauth-wag+jwt or one that contains act invalid_grant
The actor gate refuses a valid ID-JAG's agent for the user (Section 3.6.4) actor_unauthorized under Actor Profile, with HTTP 400
Other current RAS policy refuses a valid ID-JAG for the user, client, tenant, or resource access_denied (Section 4.4.1 of [ID-JAG])
Current RAS policy refuses a valid WAG for the agent, client, tenant, or resource (Section 6.5) invalid_target

6.9.1. Redemption Error Precedence

This order applies to a redemption request other than one that [OVERSIGHT] treats as recovery of, or a poll for, a pending governed redemption, which follows that document. The steps of Section 6.4.1 and Section 6.5 name the checks; this order selects the failure reported.

When such a request fails more than one check, the RAS MUST report the earliest failure in this order, whatever order it evaluates the checks in:

  1. Client authentication (invalid_client), then the DPoP proof, whether one presented is invalid or one the jwt-dpop grant type requires (Section 5 of [JWT-DPOP-GRANT]) is missing (invalid_dpop_proof, or use_dpop_nonce where a nonce is required, except that a bound grant presented without its proof fails with invalid_grant or invalid_dpop_proof under Section 4.4), then a malformed request, such as one without exactly one assertion (invalid_request).

  2. The grant: its validation, its own claims, its binding, and a proof that its binding or its resource's access-token protection requires (invalid_grant).

  3. Replay (invalid_grant).

  4. The requested resource (invalid_target), then the requested scope (invalid_scope).

  5. User resolution, then agent correlation and eligibility (invalid_grant).

  6. The actor gate (actor_unauthorized), then other current RAS policy (access_denied for an ID-JAG, invalid_target for a WAG).

  7. Approval ([OVERSIGHT]).

The RAS MUST NOT create a record under Section 6.3.1 for a request that fails a check that precedes correlation in this order.

If a check cannot complete, for example because the state that correlation or the actor gate reads is unavailable, the RAS MUST NOT issue an access token or admit the request to deferral. If it has established a failure and no check that did not complete precedes it in this order, it reports that failure. Otherwise it responds with HTTP status code 503 (Service Unavailable) (Section 15.6.4 of [RFC9110]), SHOULD include a Retry-After header field (Section 10.2.3 of [RFC9110]), and MUST NOT include an error parameter, since no token endpoint error code describes a check that did not complete.

7. Access at the Resource Server

7.1. Profile Applicability

This profile defines no in-band discriminator.

  • The RAS and API MUST establish profile applicability through trusted issuer, client, and resource configuration or authoritative token-issuance context.

  • The RAS MUST NOT issue governed and ordinary tokens for the same client and resource unless the API can distinguish them through validated claims or authenticated introspection context.

  • The RAS MUST issue tokens such that the API can determine, from trusted token context, which adoption profile and acting relationship authorized them.

The API MUST reject ambiguous applicability and reject missing or malformed act for a configured governed delegated population. Self-acting tokens carry no act (Section 7.4). An ordinary act claim alone does not establish governed issuance.

Separate client registrations, audiences, or issuers for the delegated and self-acting populations satisfy these rules; a client registration association can name a separate registration for a client's self-acting grants (Section 5.1). The absence of act alone does not: a delegated token lacking act would otherwise be accepted as self-acting.

Conformance does not by itself provide a portable discriminator for every mixed-token deployment (Section 10.2).

7.2. Token Validation

For tokens subject to this profile, the API MUST validate access tokens under [RFC9068], or obtain the same context under Section 6.8, and MUST enforce the following requirements:

  • Protection: Enforce the configured resource mode (Section 6.7) and all token confirmation claims. Validate DPoP under [RFC9449], certificate binding under [RFC8705], or permitted bearer use under [RFC6750].

  • Authority: Require non-empty scope with its defined type. Enforce any effective authorization_details under [RFC9396], using the API's defined semantics for their combination with scope.

  • Tenant: Resolve exactly one authorized Target Tenant from token context, as represented under Section 6.6. A request parameter alone cannot establish it. Verify that it matches the tenant of the requested operation. Missing, ambiguous, or conflicting tenant context MUST result in denial.

Introspection caching: A cached active response MUST NOT be used beyond exp or the freshness limit of the resource's disablement policy. Without exp, the API MUST introspect again for subsequent requests rather than reuse an active response. This narrows Section 4 of [RFC7662] so cached authorization cannot outlive an expiration unknown to the API.

Instance context: An API that uses instance context applies Section 7.5 of [INSTANCE]. It MUST NOT treat instance context as satisfying the actor gate or the agent's own permissions. Attributing a request to an instance requires the sender constraint of Section 7.3 of [INSTANCE].

7.3. Delegated Access

For delegated tokens, the API MUST also:

  • Identity: Require one act object with non-empty iss and sub and no nested act. Trust configuration MUST authorize the RAS to assert that IdP-qualified agent identity; act.iss need not equal the access-token issuer.

  • Authority: Enforce user permissions and the actor gate under Section 3.6.4 and Section 8 of [ACTOR-PROFILE].

7.4. Self-Acting Access

For self-acting tokens, the API enforces the agent's own permissions together with the requirements of Section 7.2. No actor gate applies, and a governed self-acting token has no act.

7.5. Optional Policy Services

If the API delegates authorization evaluation to a policy decision service, it MUST:

  • Preserve the distinction between the user, the issuer-qualified Agent Principal, and the OAuth client.

  • Supply the tenant and token constraints needed to evaluate the requested operation.

  • Take the user, the Agent Principal, the OAuth client, the tenant, and the token constraints that it supplies only from the access token validated under Section 7.2, or from an authenticated introspection response (Section 6.8), and from trusted configuration, including the API's own resolution of those identities to local principals. Attributes derived from the request, such as from a tool call's arguments, never supply or override them.

For a self-acting token, the local principal stands for the Agent Principal. An API that relies on the policy service for the actor gate MUST obtain from the decision whether the actor gate denied the request, or evaluate the gate itself, so that it can report the failure that Section 7.6 selects. [AUTHZEN] is one optional evaluation interface. This profile defines no mapping to it. A policy permit does not override the token's constraints.

7.6. Error Responses

Challenges and scope errors use the selected scheme: DPoP under Section 7.1 of [RFC9449], or Bearer under [RFC6750] for bearer and mutual-TLS tokens.

When a request fails more than one check, the API MUST report the failure that comes first in this table, whatever order it evaluates the checks in:

Table 19: Resource server error responses
Order Failure Response
1 Missing or invalid access token, proof, or certificate binding (Section 7.2) HTTP 401, as the applicable token or proof specification requires
2 Missing or invalid required actor claims, unauthorized namespace assertion, or missing, ambiguous, or conflicting token tenant context, including a token tenant different from the requested operation's tenant HTTP 401, invalid_token
3 The requested operation's declared argument contract is violated, including by a missing required argument or an argument that cannot be parsed The rejection the API's protocol defines, such as HTTP 400 with invalid_request (Section 3.1 of [RFC6750])
4 Actor-gate denial, including a categorical prohibition of the agent (Section 3.6.4) HTTP 403, actor_unauthorized under Section 8.2 of [ACTOR-PROFILE]
5 The operation needs scope or authorization details that the token does not carry HTTP 403, insufficient_scope under Section 3.1 of [RFC6750]
6 Any other denial of a valid token, such as the user's own permissions, a self-acting agent's own permissions, or policy for the client or tenant HTTP 403 with a challenge that carries no error attribute

Row 3 applies only when the API has identified the requested operation, its target, and its tenant without the invalid argument. A failure to present the access token or proof belongs to row 1, and a request whose operation, target, or tenant the API cannot identify is outside this table (Section 12.3). A request that names a target that does not exist is within this table: the target's absence is not a failure in it, so it does not displace a failure the table selects. An invalid argument is established from the request itself; it is not a check that cannot complete. For a row-3 failure, the API MUST NOT perform the operation, and the response MUST NOT convey actor_unauthorized or insufficient_scope.

Actor denial MUST NOT use insufficient_scope, and the API MUST NOT return actor_unauthorized for any failure other than an actor-gate denial. The API MUST NOT expose actor-specific rejection details outside the trust domain.

The last row is this profile's restriction. Section 3 of [RFC6750] requires a challenge when a token does not enable access but does not prescribe this response; neither error code would offer a remedy that can succeed. The challenge uses the selected scheme without an error attribute, and a Bearer challenge carries realm. A response body is application-specific but MUST NOT convey actor_unauthorized or insufficient_scope.

If a check cannot complete, for example because a policy service or the introspection endpoint (Section 6.8) is unreachable or returns a response the API cannot interpret, the API MUST NOT perform the operation. If it has established a failure and no check that did not complete comes earlier in this table, it reports that failure as the table selects. Otherwise it MUST NOT report a denial from this table: it responds with HTTP status code 503 (Service Unavailable) (Section 15.6.4 of [RFC9110]) and SHOULD include a Retry-After header field (Section 10.2.3 of [RFC9110]). Evaluation order therefore does not change the response.

8. Continuing Access and Authorization Changes

Deployments select a renewal model before scheduling unattended work:

Table 20: Renewal mechanisms
Mechanism Conditions
Redeem an existing ID-JAG Grant remains valid, and is bound with RAS policy permitting reuse; an unbound grant is single-use (Section 6.2)
Obtain a new ID-JAG Valid subject credential, current agent-resolution input, and a fresh IdP authorization decision (Section 5.6)
RAS refresh (delegated access) Preserves authorization at the same RAS within its lifetime and policy limits (Section 8.2)
Continue a grant-anchored chain (delegated access) The IdP supports grant anchors, the Delegation Authorization permits continuation, a refresh-token subject roots the chain at a continuation-aware RAS, and each run obtains a new ID-JAG without a user credential ([CONTINUATION])
Obtain a new WAG Current agent-resolution input and a fresh IdP authorization decision (Section 5.7); a WAG redemption yields no refresh token

8.1. Client Token Reuse

The client associates each cached grant, access token, and refresh token with its authorized context:

  • Agent Principal and, for delegated access, user;

  • Governance and Target Tenants;

  • OAuth client registrations and target RAS;

  • resource, authority, and applicable profile; and

  • proof binding.

The client MUST reuse a token or grant only when that context authorizes the operation. A shared client identifier or matching scope alone MUST NOT permit reuse across agents, users, or tenants.

If the client cannot establish that association, it MUST obtain a token or grant for the current context (Section 10.3).

8.2. Optional RAS Refresh Tokens

Issuance: The RAS SHOULD NOT issue refresh tokens, retaining Section 4.4.4 of [ID-JAG], but MAY do so for authorized long-running work under explicit policy. A WAG redemption never yields a refresh token (Section 6.5).

Binding: The RAS MUST bind each refresh token to the authenticated client and apply the first applicable additional sender-binding rule below. Bindings required by the client-authentication method, such as Section 10.3 of [ATTEST], apply in every row. Refresh-token rotation does not replace them.

Table 21: Refresh-token sender binding
Redemption context Refresh-token requirement
Grant contains cnf.jkt Retain the grant's DPoP key binding, regardless of access-token protection
Unbound grant; DPoP proof used at redemption Bind to the validated redemption proof key
No DPoP proof; certificate-bound access token Bind to the validated mutual-TLS certificate
Neither DPoP nor certificate binding Retain any authentication-method binding; if none applies, apply the fallback below

Without DPoP, certificate, or authentication-method binding, the RAS requires explicit policy permitting client-bound refresh without sender constraint and uses rotation under Section 4.14 of [RFC9700].

Resource: A refresh request MAY include one resource parameter under Section 2.2 of [RFC8707] solely to identify the retained resource. If omitted, the RAS MUST use that resource. If supplied, its value MUST match the retained resource exactly. The RAS MUST reject multiple values or a different resource with invalid_target.

Processing: On every refresh, the RAS MUST:

  1. Client and proof: Authenticate the bound client and enforce the retained authentication-method binding and any additional sender binding under RFC 9449 or RFC 8705. Dropping or replacing a sender binding requires a new grant.

  2. Authorization context: Preserve the user, qualified actor, the grant's tenant at a multi-tenant issuer, Target Tenant, resource, and authorization ceiling, including authorization_details. Apply current trust in the issuer and that tenant (Section 3.3), current local user and actor policy, and Section 6 of [RFC9396].

  3. Profile: Enforce current minimum-profile policy against the profile under which the grant was accepted. Reject with invalid_grant if it no longer qualifies. Adding a proof does not upgrade that authorization.

  4. Lifetime: Enforce a finite absolute authorization expiration set at issuance under local policy and an inactivity limit under [RFC9700]. Rotation, refresh, or repeated redemption of the same ID-JAG MUST NOT reset the absolute expiration. Access beyond it requires a new ID-JAG and therefore a fresh IdP decision. That new ID-JAG starts a new authorization period and leaves the previous expiration unchanged.

  5. Output: Issue access tokens under Section 6.6 and Section 6.7, expiring no later than the absolute authorization expiration.

8.3. Applied Disablement and Revocation

When a principal disablement, correlation removal, or local restriction is applied at the RAS, the RAS MUST:

  • Check current locally applied eligibility at grant redemption and refresh, in addition to grant validation and the actor gate.

  • Invalidate authorization derived from grants for that qualified agent and Target Tenant, including refresh tokens, when the principal is disabled or its correlation is removed. The RAS retains enough association for this from the time it issues that authorization.

  • Not let refresh bypass a principal restriction or restore revoked authorization; reactivation permits new decisions only.

9. Conformance and Capability Advertisement

9.1. Conformance Claims

This profile does not establish trust in previously unknown agent issuers or automatically create Identity Bindings from presented credentials.

Unless explicitly limited to bound grants or a named profile, the requirements of this document apply to both governed adoption profiles. Conformance claims MUST identify the supported profile by its URI (Section 9.2), the realization, the implemented role, supported inputs, and any claim of generic shared-client interoperability. An implementation supports delegated access, self-acting access, or both.

The IdP, RAS, and client MUST implement their respective requirements in:

An input defined in another input profile, such as [INPUTS], adds that profile's requirements for implementations that claim it.

Each realization has this mandatory interoperability path:

  • Issuance: The client and IdP MUST implement dedicated-client resolution using RFC 7523 private_key_jwt authentication (Section 5.3.2). For delegated access, they MUST also implement ID Token subjects.

  • Redemption: The client and RAS MUST implement private_key_jwt for redemption. DPoP support and use are REQUIRED for bound governed agent access; governed agent access follows Section 4.4.

  • API: The API MUST implement Section 7, with Section 7.4 for self-acting access.

Existing platform JWTs, SAML subjects, IdP refresh-token subjects, and the inputs of other input profiles, such as [INPUTS], are OPTIONAL capabilities. Claiming an input requires that input's rules, not support for another input. An implementation that claims generic shared-client interoperability MUST support the existing platform JWT input (Section 5.3.3): an IdP by accepting it, and a client by presenting it. Implementations that support only different native inputs do not interoperate on a shared client, and their conformance claims show this.

ID-JAG requires support for Identity Assertions (Section 4.3 of [ID-JAG]). Requiring ID Token subjects specifically gives independent implementations a common subject-token format. This is an implementation baseline, not a requirement to deploy one client per agent: deployments MAY use mutually supported optional inputs (Section 10.1).

9.2. Authorization Server and Client Metadata

The governed profiles have distinct identifiers:

  • Governed agent access: urn:ietf:params:oauth:grant-profile:id-jag-governed-agent

  • Bound governed agent access: urn:ietf:params:oauth:grant-profile:id-jag-agent-federation

  • Self-acting governed agent access: urn:ietf:params:oauth:grant-profile:wag-governed-agent

  • Self-acting bound governed agent access: urn:ietf:params:oauth:grant-profile:wag-agent-federation

Enterprise access uses the base urn:ietf:params:oauth:grant-profile:id-jag identifier under ID-JAG; that identifier alone makes no governed-agent conformance claim.

These URIs identify RAS and client processing. No URI claims a credential class, continuation support, a particular workload-evidence protection, or access-token protection; these are capabilities and configured minimums.

9.2.1. Authorization Server Metadata

Servers MUST publish [RFC8414] metadata as follows:

  • RAS: Include each supported governed profile URI in authorization_grant_profiles_supported, with the base urn:ietf:params:oauth:grant-profile:id-jag for delegated access and the base urn:ietf:params:oauth:grant-profile:wag (Section 8 of [WAG]) for self-acting access.

    • Include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported for this profile, and urn:ietf:params:oauth:grant-type:jwt-dpop when the RAS accepts grants containing cnf (Section 5.2 of [JWT-DPOP-GRANT]).

  • IdP: Advertise Token Exchange in grant_types_supported. For delegated access, advertise ID-JAG in identity_chaining_requested_token_types_supported under Section 7.1 of [ID-JAG]. For self-acting access, advertise the WAG token type in the same parameter; [WAG] defines no metadata for the issuer, so this use is specific to this profile.

    • Include private_key_jwt in token_endpoint_auth_methods_supported.

  • Both: Advertise supported client authentication methods and, when DPoP is supported, DPoP algorithms, including Section 4.5's common capabilities. Where supported, publish the existing Client ID Metadata Document (CIMD) and mutual-TLS capability metadata defined by [CIMD] and [RFC8705].

9.2.2. Client Metadata

A client SHOULD advertise each supported governed profile URI in authorization_grant_profiles_supported in its authoritative client metadata under Section 8 of [ID-JAG], including when supplied through CIMD. Its grant_types MUST permit:

  • urn:ietf:params:oauth:grant-type:token-exchange at the IdP.

  • urn:ietf:params:oauth:grant-type:jwt-bearer at the RAS, and urn:ietf:params:oauth:grant-type:jwt-dpop there when the client redeems grants containing cnf.

When that metadata is a Client ID Metadata Document, the client authentication methods it lists are those in its token_endpoint_auth_methods_supported, or, where that is absent, its token_endpoint_auth_method (Section 5 of [CIMD]). They MUST include, for each server using the document, a method other than none that the server accepts for the client (Section 4 of [CIMD] lets a profile restrict them). A client that authenticates with an input of [INPUTS] lists that input's method. A document that lists private_key_jwt MUST publish the client's keys with jwks or jwks_uri.

A server that accepts Client ID Metadata Documents under this profile selects a listed method that it accepts for the client, and its policy can restrict the methods it accepts (Section 5 of [CIMD]); it MUST NOT select none. It MUST reject, with invalid_client, a request from a client whose metadata is such a document and lists no method other than none that the server accepts for that client, or lists private_key_jwt without jwks or jwks_uri. No response reports the selection, so the client uses at each server the method its configuration for that server names. A client whose IdP and RAS accept different methods can therefore use one document at both, listing a method that each accepts. Where the RAS accepts none of the listed methods, the client registers separately at the RAS, and the client registration association (Section 5.1) maps the two identifiers.

Two points of Section 5 of [CIMD] bear on one document at both servers. First, a server that supports a declared private_key_jwt requires client authentication with it, and every IdP under this profile supports that method (Section 9.2). An IdP that accepts another listed method, such as the spiffe_jwt method of [SPIFFE-OAUTH], from a document that also lists private_key_jwt therefore relies on its policy restricting the methods it supports for that client. Second, the section requires jwks or jwks_uri with JWT-based methods without saying whether that includes methods whose keys come from elsewhere, such as spiffe_jwt or the methods of [ATTEST]; whether a document that lists only such methods needs a JWK Set is unsettled.

9.2.3. Capability Discovery

Before using either grant path:

  • Issuance support: The client and IdP MUST agree through trusted configuration on issuance support and any options. Generic JWT or authentication-method support is insufficient.

  • RAS capabilities: The client MUST verify the RAS's profile advertisement, support for the grant type it will redeem with (Section 6.1), and compatible access-token protection. If no supported profile satisfies the configured minimum, the client MUST NOT initiate that path.

  • Metadata consistency: For delegated access, if the actor_profile_token_exchange parameter of Section 10.1 of [ACTOR-PROFILE] is published, it MUST describe only the paths actually supported and agree with the ID-JAG advertisement.

10. Implementation Considerations

These considerations add no requirements. They describe implementation and deployment choices that affect how the requirements of the sections cited are met.

10.1. Identity Provider

  • Bindings and associations: For a dedicated client, deployments can administer the Identity Binding and the Client Association in one registration or policy object; they remain separate checks (Section 5.3.6).

  • Dedicated clients and user sign-in: An ID Token's audience identifies the authenticated IdP client (Section 5.6.2). A dedicated deployment therefore needs a user authorization flow for each agent's client registration, though an existing IdP session may avoid another login prompt. A platform that keeps its shared single sign-on (SSO) client instead uses the existing platform JWT (Section 5.3.3) or an optional input.

10.2. RAS and API

  • Actor gate: The actor gate (Section 3.6.4) can be implemented through an agent registration, tenant assignment, consent policy, or another explicit rule.

  • Attribution: Audit records that identify both the user and the issuer-qualified actor, rather than the client identifier alone, preserve attribution.

  • Mixed token populations: Where one issuer serves ordinary, delegated, and self-acting access to one API, the RAS can use a separate client registration or audience for each population, and the API is configured with that mapping (Section 7.1). A deployment that needs one registration and one audience for several populations needs an additional bilateral contract.

10.3. Client

  • Cached tokens: The association of Section 8.1 can use trusted request and configuration context; clients need not parse opaque tokens. A credential change alone need not invalidate cached tokens when the governed principal and authorization context remain the same.

  • Recovering from errors: An error establishes only what the sections that assign it define:

    • invalid_client: a consumed client assertion is replaced by one with a fresh jti, as the retry rule of Section 5.3.2 requires. An unknown client, a wrong key, or an unsupported method needs configuration, not a retry.

    • invalid_request at the IdP: a malformed request needs correction. An invalid subject credential or agent-resolution input gets the same code, so a client whose unchanged request previously succeeded can make one recovery attempt with a fresh subject credential and agent-resolution input of the same identity, client, and credential class (Section 4.3.4.3 of [ID-JAG]).

    • invalid_grant at the IdP: a valid credential resolved no user, or no active Identity Binding, Agent Principal, or Governance Tenant; renewal cannot repair it.

    • invalid_grant at the RAS: a rejected request does not consume the grant (Section 6.2). After correcting what it can detect itself, such as a missing proof, including one that the resource's access-token protection requires, or a grant addressed to another server, a client can present the same grant again. Otherwise it can make one recovery attempt with a new grant for the same identity and client (Section 4.4.4 of [ID-JAG]). The code does not say which check failed (Section 12.3), and renewal cannot repair a disabled agent, a missing proof, a resource the RAS does not govern, or a malformed grant.

    • invalid_scope: the client corrects the requested scope using authority it knows is permitted. Reducing a request helps only if what remains is permitted.

    • access_denied at the RAS: the grant is valid, but RAS policy other than the actor gate refuses it; a new grant does not help (Section 4.4.3 of [ID-JAG]).

    • invalid_target: covers an unresolved target, or a tenant unresolved at the IdP, a missing client registration association, and the refusals of self-acting issuance, including an unenforceable approval condition.

    • actor_unauthorized: another actor credential or grant path might succeed (Section 9 of [ACTOR-PROFILE]); the same request will not. Self-acting access in place of a refused delegation is not such a path (Section 5.4, Section 12.7).

    • At an API, insufficient_scope calls for a token with more authority, which can need a new governed grant; a 403 whose challenge has no error attribute has no token-level remedy; a 503 can be retried after any Retry-After interval; and the rejection of an invalid argument calls for a corrected request (Section 7.6).

    Apart from the invalid_client, invalid_request, and invalid_grant attempts above and a 503, a client does not retry the unchanged request automatically. A later change in policy or authorization makes a new request a new decision. Section 4.8 forbids retrying at a lower profile, Section 5.3.5 forbids falling back from rejected evidence to authentication context, and Section 5.4 forbids falling back from delegated to self-acting access.

11. Implementation Status

Note to the RFC Editor: please remove this section before publication, as well as the reference to RFC 7942.

This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in [RFC7942]. The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs. Please note that the listing of any individual implementation here does not imply endorsement by the IETF. Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors. This is not intended as, and must not be construed to be, a catalog of available implementations or their features. Readers are advised to note that other implementations may exist.

According to [RFC7942], "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature. It is up to the individual working groups to use this information as they see fit".

11.1. Conformance Reference Implementation

  • Organization: the document author.

  • Description: a test-only IdP, RAS, and API, with an executable suite of positive and negative cases that plays the client: https://github.com/mcguinness/agent-principal-profiles/tree/main/conformance.

  • Maturity: prototype. State is in memory, there is no TLS, and keys are generated at start; it exists to run the suite.

  • Coverage: delegated access on the mandatory interoperability path (Section 9.1): dedicated-client resolution with private_key_jwt and ID Token subjects; both delegated adoption profiles, with grants redeemed under jwt-bearer or jwt-dpop; DPoP-bound and, where a resource permits them, bearer access tokens; DPoP nonces; the actor gate at the RAS and the API; tenant-pair authorization at the IdP; optional just-in-time correlation; the error selection order and optional policy services at the API; introspection of opaque tokens; the existing platform JWT input for a shared client, with a dedicated-issuer credential class and exact issuer-and-sub bindings; WAG issuance from client authentication and WAG redemption, with a separate self-acting registration; and the deferred redemption of [OVERSIGHT] at the RAS, for an ID-JAG. It does not implement presented-evidence WAG issuance, deferred WAG redemption, platform JWT selectors, the binding of key-bound platform JWTs (it refuses them), the inputs of [INPUTS], Client ID Metadata Documents, mutual TLS, refresh tokens outside a deferred redemption, [CONTINUATION], [AGENT-LIFECYCLE], or [AGENT-MANAGEMENT].

  • Version compatibility: the editor's copy of this document and its companions; no revision has been submitted.

  • Licensing: a Contribution under BCP 78, BCP 79, and the IETF Trust Legal Provisions; see the repository's LICENSE.md.

  • Interoperability: not yet tested with another implementation. The suite can test a RAS and API without a governed IdP, signing grants itself.

  • Contact: the document author.

  • Last update: November 2026.

12. Security Considerations

The security requirements of the selected credential and grant specifications, [RFC9700], and [RFC8725] apply.

12.1. Unbound Grant Theft

Governed agent access without grant binding adds agent authorization to existing enterprise access. It still leaves a stolen grant redeemable by an attacker who can authenticate as the grant's designated client, particularly a shared client. Single use (Section 6.2) limits such a grant to one redemption; it does not prevent the first. Binding only the resulting access token does not prevent that redemption. Explicit acceptance policy, short grant lifetimes, credential confidentiality, and the no-fallback rules in Section 4.8 limit this exposure. They do not provide proof of possession of an issuer-authorized grant key.

12.2. Credential and Token Confusion

Credential classification and mutually exclusive validation follow Section 5.3.5 and Section 3.12 of [RFC8725]. Signature validity alone establishes neither a credential's intended use nor permission to resolve or exercise an agent.

Both grants are JWTs redeemed with the same JWT grant types, so the RAS tells them apart by explicit type: oauth-id-jag+jwt for an ID-JAG (Section 3.1 of [ID-JAG]) and oauth-wag+jwt for a WAG (Section 6.5).

12.3. Error Disclosure

Distinguishing invalid_grant from actor_unauthorized (Section 5.8) reveals that an actor was resolved but denied, but not which binding-resolution check failed. That disclosure reaches even a holder of stolen bearer evidence who passes the request's other authentication. At the RAS, actor_unauthorized (Section 6.9) tells an authenticated client holding a valid grant that the actor gate refused its agent, and access_denied that other policy refused the grant, not why; an uncorrelated or ineligible agent gets invalid_grant, as at the IdP.

An API that answers differently depending on whether a route, target, or tenant exists discloses that existence. Within a namespace the API protects, where it knows which access-token validation applies, the API SHOULD validate the access token, its proof, and the token's applicability to the API before returning an error whose status or content depends on that existence. This does not require validation before every rejection: a rejection that is the same for every request in the namespace, such as of an unsupported media type, discloses nothing, and the API can need to route a request to select the validation that applies, or parse it to obtain the credential. Beyond this recommendation, how the rejection of a request the API cannot identify ranks against the failures of Section 7.6, including a token validation that cannot complete, is not specified.

A request that names a target that does not exist is not a request the API cannot identify. Section 7.6 applies to it, so the API reports a failure that table selects, such as an actor-gate denial, before the target's absence, and a caller that would be denied does not learn whether the target exists. For the failures that table covers, its responses take precedence over the 404 (Not Found) that Section 15.5.4 of [RFC9110] permits a server to send to hide a forbidden resource.

12.4. Bearer Workload Evidence

Bearer evidence establishes the credential authority's assertion of the workload identity. It does not cryptographically bind the current presenter to that workload. An attacker who holds acceptable bearer workload evidence can therefore impersonate the workload and obtain a grant, bound to a grant proof key of its choice, if it also passes:

  • client authentication;

  • Client Association; and

  • either the user-credential and delegation checks or the agent-authorization check.

Short evidence lifetimes limit this exposure; sender-constraining the output does not prevent it (Section 5.3.4).

12.5. Dedicated-Client Key Compromise

In dedicated-client resolution, compromise of the client's authentication key permits an attacker to authenticate as the resolution source for its bound Agent Principal. No independent workload credential is required.

For delegated access, the attacker still needs an acceptable user subject credential and has to satisfy Client Association and delegation authorization. For self-acting access, the key alone suffices wherever a Client Association and Agent Authorization already permit the client.

Grant binding does not prevent this impersonation at issuance. Unless policy independently constrains the grant proof key, the attacker can obtain a grant bound to an attacker-controlled DPoP key. The proof protects that grant against theft; it does not establish legitimate runtime provenance.

Runtime or workload provenance requires an agent-resolution input whose verified claims and trusted issuance policy establish it. Dedicated-client resolution alone does not. A normalized Agent Principal identity does not imply uniform runtime assurance. Authentication-key revocation and binding disablement affect subsequent issuance under Section 5.4 and Section 12.8.

12.6. Credential Authority and Key Isolation

A compromised credential authority can assert identities within its trusted scope. Exact bindings, tenant boundaries, and issuer-scoped key lookup (Section 4.6) limit that scope. Neither kid alone nor a union of unrelated issuers' keys establishes the assertion's source.

A RAS that trusts one tenant of a multi-tenant issuer relies on that issuer to keep its tenants apart: a grant's tenant is only as trustworthy as the issuer that signs for every tenant (Section 3.3). Trust in one tenant does not extend to the issuer's others, but a compromise of the issuer's signing key reaches them all.

Just-in-time correlation (Section 6.3.1) creates RAS state for each previously unseen agent that a trusted issuer asserts, as Section 10 of [WAG] notes. A RAS that enables it can cap the records created per issuer, or per issuer and tenant, and remove records that never become eligible. A created record authorizes nothing, so the exposure is state, not access.

A holder of a shared private key can present any credential issued for that key. Agent isolation therefore depends on issuance controls and key custody as well as identity mapping. Sharing the grant proof key across components widens its exposure ([GUIDE]).

12.7. Misuse by an Authorized Agent

This profile establishes which agent acts, for whom, and under what authorization. It does not establish that the agent uses that authority as intended. Content the agent processes, such as a document, a tool result, or another agent's output, can carry instructions that lead it to request or use authority it holds for a purpose its user or owner did not intend (prompt injection). The resulting requests are authenticated and authorized, so the checks of this profile pass.

The profile limits that exposure without detecting it:

  • A grant carries one resource and the authority that the Delegation or Agent Authorization permits (Section 5.2). For delegated access, the RAS and the API enforce the actor gate (Section 3.6.4); for self-acting access, they enforce the agent's own permissions. Narrow authorizations limit what an induced request can obtain.

  • Detection alone changes no authorization state: the agent can keep obtaining grants until its authorization is withdrawn or it is disabled. After further issuance and renewal are blocked, token lifetimes and revocation enforcement determine how long previously issued authority remains usable (Section 12.8).

  • Every grant names the Agent Principal, and every access token carries it or the local principal correlated with it, so a resource domain can attribute, investigate, and disable one agent without affecting other agents behind the same client.

  • [CONTINUATION] bounds each onward grant by the chain authorization and the continuing client's Continuation Association, and [OVERSIGHT] lets policy require a person's decision before sensitive authority issues.

Holding both acting relationships widens that exposure. An agent refused for a user, at the IdP, the RAS, or the API, can hold self-acting authority over the same resource. The IdP refuses self-acting access as a fallback from a denied delegation (Section 5.4), but it cannot link a later self-acting request to a refusal elsewhere, and a self-acting token carries no user whose permissions the API could apply. A client that holds both kinds of Client Association can therefore serve a user with the agent's own authority. A rule on clients would bind only clients that follow it. The control is separation at the IdP: a client that acts for users holds no self-acting Client Association, and self-acting work uses another IdP client with its own Client Association. A separate RAS registration for one IdP client's self-acting grants (Section 5.1) tells the token populations apart but leaves both acting relationships with that client, so it is not this separation.

It does not distinguish an induced request from an intended one, inspect content, or constrain how authority is used within its scope. Those controls belong to the agent's runtime, its platform, and resource policy, including decisions on individual actions. Evidence about an agent's software or configuration can inform policy; it does not establish that the agent behaves safely.

12.8. Authorization Changes and Revocation

Cross-system disablement needs a provisioning and signaling contract. [AGENT-LIFECYCLE] profiles one; conformance to this document does not require it. Issued authority can outlast disablement:

  • Without a signal or online check, issued tokens remain usable until expiration.

  • Without a bound on propagation, the remaining lifetime of existing grants, refresh authorizations, and access tokens determines the possible continuation window. The five-minute ID-JAG recommendation is not a global stopping guarantee.

  • Even after disablement is applied, cached introspection results or offline JWTs can remain usable until their acceptance limits.

  • Current active state alone cannot recover a missed disable-and-reenable transition or invalidate every old grant.

Deployments benefit from documenting their maximum disablement delay, including propagation and cache freshness.

Administrative actions have different effects, and none is evidence that another has occurred. The following table summarizes each effect after the change is applied at the enforcing server; it defines no new propagation mechanism:

Table 22: Effects of administrative changes
Administrative action Effect on new authorization Previously issued authority
Terminate an execution Stops that execution; does not disable the agent or its approved relationships Credentials and tokens remain subject to their validation and revocation rules
Suspend one client instance ([INSTANCE]) That instance fails authentication where the suspension is enforced; the agent's other bindings and instances continue Revocation and introspection follow Section 6.3 of [INSTANCE]
Disable one Identity Binding at the IdP No new grant through that binding; other enabled bindings remain usable with their own Client Associations Grants and RAS tokens continue until separately revoked or expired
Remove a Client Association at the IdP No new grant through that permission; the Identity Binding can remain valid Grants and RAS tokens continue until separately revoked or expired
Disable the Agent Principal at the IdP No new grant for that agent, regardless of binding or client RAS issuance and refresh stop once the RAS receives and applies the change
Withdraw the user's delegation at the IdP No new delegated grant for that delegation RAS authorization can continue until revocation is applied or its absolute expiration
Disable the local agent or user at the RAS No new access tokens or refresh for that principal API access stops when its actor/user policy observes the change, introspection reports inactivity, or the token expires

The RAS requirements for applied changes are in Section 8.3. The provisioning that feeds them is a deployment choice.

The withdrawal of a delegation, Identity Binding, or Client Association can be propagated to derived authorization only when the IdP has retained the identifiers of the ID-JAGs it issued under that relationship. The agent identity alone cannot identify that set. Propagation can use grant-derived revocation in [AGENT-LIFECYCLE] or an equivalent signal.

Account-linking errors can grant access to another user's account. Section 5.6.3 and Section 6.4.2 state the checks required before authorization. Proof of key possession does not establish account ownership, and link removal does not revoke outstanding tokens.

12.9. External Approval

External approval MUST NOT replace credential validation, identity resolution, Client Association, or delegation authorization. A resource-local approval can satisfy an additional policy condition within the presented token's authority. It MUST NOT expand that authority or override token validity or tenant restrictions. Access beyond that authority requires new authorization through an applicable protocol. Approval before issuance or redemption follows [OVERSIGHT]; other asynchronous approval composition is deferred under Appendix B.3.

13. Privacy Considerations

A stable agent identifier can correlate activity across resources, users, and instances. Preserving the same issuer-qualified actor across delegated users supports audit but lets a resource domain link the activity of one Agent Principal for different users.

Issuers SHOULD disclose only the agent attributes needed for the authorized purpose. User and agent context remain separate when the agent acts for a user. The mapping in Section 5.6.4 keeps external workload identifiers out of the ID-JAG. This profile does not define pairwise actor translation.

Instance context adds correlation of individual executions. Its identifiers are scoped per receiver and per consumer under Section 10 of [INSTANCE].

14. IANA Considerations

14.1. ID-JAG Grant Profile URIs

This document requests registration in the "OAuth URI" registry established by [RFC6755]:

  • URN: urn:ietf:params:oauth:grant-profile:id-jag-agent-federation

  • Common Name: ID-JAG Bound Governed Agent Access grant profile

  • Change Controller: IETF

  • Specification Document: Section 9.2 of this document.

This document also requests:

  • URN: urn:ietf:params:oauth:grant-profile:id-jag-governed-agent

  • Common Name: ID-JAG Governed Agent Access grant profile

  • Change Controller: IETF

  • Specification Document: Section 9.2 of this document.

14.2. WAG Grant Profile URIs

This document also requests:

  • URN: urn:ietf:params:oauth:grant-profile:wag-agent-federation

  • Common Name: WAG Bound Governed Agent Access grant profile

  • Change Controller: IETF

  • Specification Document: Section 9.2 of this document.

  • URN: urn:ietf:params:oauth:grant-profile:wag-governed-agent

  • Common Name: WAG Governed Agent Access grant profile

  • Change Controller: IETF

  • Specification Document: Section 9.2 of this document.

Section 11 of [WAG] registers the WAG token type urn:ietf:params:oauth:token-type:wag, the media type oauth-wag+jwt used as the JWT type, and urn:ietf:params:oauth:grant-profile:wag. This document requests no registration for them.

15. References

15.1. Normative References

[WISE]
Lombardo, J., Sneeggen, D., and S. O'Dell, "OpenID WISE Profile Specification 1.0, draft 03", , <https://openid.github.io/ssf-wise-profile/>.
[ATTEST]
Looker, T., Bastian, P., and C. Bormann, "OAuth 2.0 Attestation-Based Client Authentication", Work in Progress, Internet-Draft, draft-ietf-oauth-attestation-based-client-auth-12, , <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-attestation-based-client-auth-12>.
[INSTANCE]
McGuinness, K., "OAuth 2.0 Client Instance Identifiers", Work in Progress, Internet-Draft, draft-mcguinness-oauth-client-instance-id-01, , <https://datatracker.ietf.org/doc/html/draft-mcguinness-oauth-client-instance-id-01>.
[ACTOR-PROFILE]
McGuinness, K., "OAuth Actor Profile for Delegation", Work in Progress, Internet-Draft, draft-mcguinness-oauth-actor-profile-01, , <https://datatracker.ietf.org/doc/html/draft-mcguinness-oauth-actor-profile-01>.
[ID-JAG]
Parecki, A., McGuinness, K., and B. Campbell, "Identity Assertion JWT Authorization Grant", Work in Progress, Internet-Draft, draft-ietf-oauth-identity-assertion-authz-grant-06, , <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-identity-assertion-authz-grant-06>.
[JWT-DPOP-GRANT]
Parecki, A., "OAuth 2.0 JWT Authorization Grant with DPoP Binding", Work in Progress, Internet-Draft, draft-parecki-oauth-jwt-dpop-grant-02, , <https://datatracker.ietf.org/doc/html/draft-parecki-oauth-jwt-dpop-grant-02>.
[RFC10070]
Jones, M.B., Campbell, B., Mortimore, C., and F. Skokan, "Updates to OAuth 2.0 JSON Web Token (JWT) Client Authentication and Assertion-Based Authorization Grants", RFC 10070, DOI 10.17487/RFC10070, , <https://www.rfc-editor.org/rfc/rfc10070>.
[CIMD]
Parecki, A. and E. Smith, "OAuth Client ID Metadata Document", Work in Progress, Internet-Draft, draft-ietf-oauth-client-id-metadata-document-03, , <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-client-id-metadata-document-03>.
[OPENID]
OpenID Foundation, "OpenID Connect Core 1.0 incorporating errata set 2", , <https://openid.net/specs/openid-connect-core-1_0.html>.
[RFC6749]
Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", RFC 6749, DOI 10.17487/RFC6749, , <https://www.rfc-editor.org/rfc/rfc6749>.
[RFC6750]
Jones, M. and D. Hardt, "The OAuth 2.0 Authorization Framework: Bearer Token Usage", RFC 6750, DOI 10.17487/RFC6750, , <https://www.rfc-editor.org/rfc/rfc6750>.
[RFC6901]
Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., "JavaScript Object Notation (JSON) Pointer", RFC 6901, DOI 10.17487/RFC6901, , <https://www.rfc-editor.org/rfc/rfc6901>.
[RFC7517]
Jones, M., "JSON Web Key (JWK)", RFC 7517, DOI 10.17487/RFC7517, , <https://www.rfc-editor.org/rfc/rfc7517>.
[RFC7519]
Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, , <https://www.rfc-editor.org/rfc/rfc7519>.
[RFC7523]
Jones, M., Campbell, B., and C. Mortimore, "JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants", RFC 7523, DOI 10.17487/RFC7523, , <https://www.rfc-editor.org/rfc/rfc7523>.
[RFC7662]
Richer, J., Ed., "OAuth 2.0 Token Introspection", RFC 7662, DOI 10.17487/RFC7662, , <https://www.rfc-editor.org/rfc/rfc7662>.
[RFC8414]
Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 Authorization Server Metadata", RFC 8414, DOI 10.17487/RFC8414, , <https://www.rfc-editor.org/rfc/rfc8414>.
[RFC8693]
Jones, M., Nadalin, A., Campbell, B., Ed., Bradley, J., and C. Mortimore, "OAuth 2.0 Token Exchange", RFC 8693, DOI 10.17487/RFC8693, , <https://www.rfc-editor.org/rfc/rfc8693>.
[RFC8705]
Campbell, B., Bradley, J., Sakimura, N., and T. Lodderstedt, "OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens", RFC 8705, DOI 10.17487/RFC8705, , <https://www.rfc-editor.org/rfc/rfc8705>.
[RFC8707]
Campbell, B., Bradley, J., and H. Tschofenig, "Resource Indicators for OAuth 2.0", RFC 8707, DOI 10.17487/RFC8707, , <https://www.rfc-editor.org/rfc/rfc8707>.
[RFC8725]
Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best Current Practices", BCP 225, RFC 8725, DOI 10.17487/RFC8725, , <https://www.rfc-editor.org/rfc/rfc8725>.
[RFC9068]
Bertocci, V., "JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens", RFC 9068, DOI 10.17487/RFC9068, , <https://www.rfc-editor.org/rfc/rfc9068>.
[RFC9110]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., "HTTP Semantics", STD 97, RFC 9110, DOI 10.17487/RFC9110, , <https://www.rfc-editor.org/rfc/rfc9110>.
[RFC9396]
Lodderstedt, T., Richer, J., and B. Campbell, "OAuth 2.0 Rich Authorization Requests", RFC 9396, DOI 10.17487/RFC9396, , <https://www.rfc-editor.org/rfc/rfc9396>.
[RFC9449]
Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., Jones, M., and D. Waite, "OAuth 2.0 Demonstrating Proof of Possession (DPoP)", RFC 9449, DOI 10.17487/RFC9449, , <https://www.rfc-editor.org/rfc/rfc9449>.
[RFC9700]
Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, "Best Current Practice for OAuth 2.0 Security", BCP 240, RFC 9700, DOI 10.17487/RFC9700, , <https://www.rfc-editor.org/rfc/rfc9700>.
[INPUTS]
McGuinness, K., "Agent Resolution Inputs for Agent Principal Federation", Work in Progress, Internet-Draft, draft-mcguinness-oauth-governed-agent-inputs, , <https://mcguinness.github.io/agent-principal-profiles/draft-mcguinness-oauth-governed-agent-inputs.html>.
[BCP14]
Best Current Practice 14, <https://www.rfc-editor.org/info/bcp14>.
At the time of writing, this BCP comprises the following:
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.

15.2. Informative References

[AGENT-MANAGEMENT]
McGuinness, K., "SCIM Profile for Agent Principal Management", Work in Progress, Internet-Draft, draft-mcguinness-scim-agent-federation, , <https://mcguinness.github.io/agent-principal-profiles/draft-mcguinness-scim-agent-federation.html>.
[AIMS]
Kasselman, P., Lombardo, J., Rosomakho, Y., Campbell, B., Steele, N., and A. Parecki, "AI Identity Management System", Work in Progress, Internet-Draft, draft-ietf-wimse-aims-01, , <https://datatracker.ietf.org/doc/html/draft-ietf-wimse-aims-01>.
[AGENT-LIFECYCLE]
McGuinness, K., "Agent Principal Lifecycle Profile for SCIM and OAuth", Work in Progress, Internet-Draft, draft-mcguinness-oauth-governed-agent-lifecycle, n.d., <https://mcguinness.github.io/agent-principal-profiles/draft-mcguinness-oauth-governed-agent-lifecycle.html>.
[EMA]
Model Context Protocol, "Enterprise-Managed Authorization", n.d., <https://github.com/modelcontextprotocol/ext-auth/blob/main/specification/stable/enterprise-managed-authorization/2026-07-28/enterprise-managed-authorization.mdx>.
[AUTHZEN]
OpenID Foundation, "Authorization API 1.0", n.d., <https://openid.net/specs/authorization-api-1_0.html>.
[AROP]
McGuinness, K., "AuthZEN Access Request OAuth Profile - Draft 1", n.d., <https://github.com/openid/authzen/blob/main/profiles/authzen-access-request-oauth/authzen-access-request-oauth-profile-1_0.md>.
[AWS-TOKEN-CLAIMS]
Amazon Web Services, "Understanding token claims", n.d., <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_outbound_token_claims.html>.
[AWS-AGENTCORE-OBO]
Amazon Web Services, "On-behalf-of token exchange with AgentCore Identity", n.d., <https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/on-behalf-of-token-exchange.html>.
[ICA]
McGuinness, K. and A. Parecki, "Identity Continuation Assertion for OAuth 2.0 Token Exchange", Work in Progress, Internet-Draft, draft-mcguinness-oauth-id-continuation-assertion-02, , <https://datatracker.ietf.org/doc/html/draft-mcguinness-oauth-id-continuation-assertion-02>.
[ID-CHAINING]
Schwenkschuster, A., Kasselman, P., Burgin, K., Jenkins, M. J., Campbell, B., and A. Parecki, "OAuth Identity and Authorization Chaining Across Domains", Work in Progress, Internet-Draft, draft-ietf-oauth-identity-chaining-17, , <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-identity-chaining-17>.
[OVERSIGHT]
McGuinness, K., "Human Oversight Profile for Agent Principal Federation", Work in Progress, Internet-Draft, draft-mcguinness-oauth-governed-agent-oversight, <https://mcguinness.github.io/agent-principal-profiles/draft-mcguinness-oauth-governed-agent-oversight.html>.
[CONTINUATION]
McGuinness, K., "Identity Continuation Profile for Agent Principal Federation", Work in Progress, Internet-Draft, draft-mcguinness-oauth-governed-agent-continuation, , <https://mcguinness.github.io/agent-principal-profiles/draft-mcguinness-oauth-governed-agent-continuation.html>.
[RFC6755]
Campbell, B. and H. Tschofenig, "An IETF URN Sub-Namespace for OAuth", RFC 6755, DOI 10.17487/RFC6755, , <https://www.rfc-editor.org/rfc/rfc6755>.
[RFC7521]
Campbell, B., Mortimore, C., Jones, M., and Y. Goland, "Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants", RFC 7521, DOI 10.17487/RFC7521, , <https://www.rfc-editor.org/rfc/rfc7521>.
[RFC7942]
Sheffer, Y. and A. Farrel, "Improving Awareness of Running Code: The Implementation Status Section", BCP 205, RFC 7942, DOI 10.17487/RFC7942, , <https://www.rfc-editor.org/rfc/rfc7942>.
[WAG]
Carleton, P., Steele, N., Parecki, A., Schwenkschuster, A., and B. Campbell, "Workload Authorization Grant", Work in Progress, Internet-Draft, draft-carleton-workload-authz-grant-02, , <https://datatracker.ietf.org/doc/html/draft-carleton-workload-authz-grant-02>.
[SPIFFE-CONCEPTS]
SPIFFE, "SPIFFE Concepts", n.d., <https://spiffe.io/docs/latest/spiffe-about/spiffe-concepts/>.
[ENTITY-PROFILES]
Mora, S. C., Dingle, P., and K. McGuinness, "OAuth 2.0 Entity Profiles", Work in Progress, Internet-Draft, draft-mora-oauth-entity-profiles-02, , <https://datatracker.ietf.org/doc/html/draft-mora-oauth-entity-profiles-02>.
[GUIDE]
McGuinness, K., "Implementer's Guide for Agent Principal Federation", <https://github.com/mcguinness/agent-principal-profiles/blob/main/IMPLEMENTERS-GUIDE.md>.
[SPIFFE-OAUTH]
Schwenkschuster, A., Kasselman, P., Rose, S., Thorgersen, S., and N. Cam-Winget, "OAuth SPIFFE Client Authentication", Work in Progress, Internet-Draft, draft-ietf-oauth-spiffe-client-auth-03, , <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-spiffe-client-auth-03>.

Appendix A. Worked Exchanges and Input Variants

A.1. Walkthrough: Dedicated Client

This non-normative walkthrough exercises the common dedicated-client input, bound governed agent access, and DPoP-protected API access. Key coordinates, thumbprints, token hashes, and compact JWTs are labeled placeholders, not cryptographic test vectors.

The dedicated client is analysis-client at the IdP and analysis-api at the RAS. In the IdP's client-registration context, an Identity Binding maps (analysis-client, analysis-client) to agent-42. A separate Client Association permits use of that binding, and delegation authorization permits the agent to act for Alice. Alice's ID Token has audience analysis-client; subject resolution produces alice-ras for the RAS and user-108 at the resource.

The exchange starts at 12:01:03 UTC on September 17, 2026. The shared walkthrough in [AGENT-LIFECYCLE] uses the same identities, Target Tenant acme-data, and grant issuance time to add SCIM provisioning, introspection, disablement, and reactivation. This document alone does not imply those checks.

A.1.1. Dedicated Client Authentication

The client signs this illustrative assertion payload with its registered private key, using an RS256 header and the registered key identifier:

{
  "iss": "analysis-client",
  "sub": "analysis-client",
  "aud": "https://idp.example/",
  "iat": 1789646463,
  "exp": 1789646523,
  "jti": "analysis-auth-1"
}

CLIENT_ASSERTION denotes the signed compact JWT, presented only in client_assertion under Section 5.3.2. The Identity Binding resolves the authenticated client to agent-42. No actor-token parameters are sent, and the assertion supplies no independent workload identity. The assertion expires after 60 seconds but does not cap the grant's 300-second lifetime. Alice's ID Token remains valid for at least that period.

A.1.2. Exchange Request and Response

The HTTP examples show application parameters and relevant headers; framing headers are omitted. Bodies are line-wrapped for display; concatenate their lines before sending.

IDP_DPOP_PROOF proves a separate grant key K, with htm=POST, htu=https://idp.example/token, a current iat, a unique jti, and a server nonce if challenged. JKT_K denotes K's JWK thumbprint. The same key is proven at redemption.

POST /token HTTP/1.1
Host: idp.example
Content-Type: application/x-www-form-urlencoded
DPoP: IDP_DPOP_PROOF

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&requested_token_type=urn%3Aietf%3Aparams%3Aoauth
%3Atoken-type%3Aid-jag
&client_id=analysis-client
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth
%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=CLIENT_ASSERTION
&subject_token=ALICE_ID_TOKEN_FOR_ANALYSIS_CLIENT
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth
%3Atoken-type%3Aid_token
&audience=https%3A%2F%2Fras.example%2F
&resource=https%3A%2F%2Fapi.example%2Ftenants%2Facme-data%2F
&scope=files.read
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "ID_JAG",
  "issued_token_type": "urn:ietf:params:oauth:token-type:id-jag",
  "token_type": "N_A",
  "expires_in": 300,
  "scope": "files.read"
}

The decoded grant header uses alg=RS256, typ=oauth-id-jag+jwt, and an IdP signing-key identifier. Its payload includes:

{
  "iss": "https://idp.example/",
  "sub": "alice-ras",
  "aud": "https://ras.example/",
  "iat": 1789646463,
  "exp": 1789646763,
  "jti": "grant-1",
  "client_id": "analysis-api",
  "resource": "https://api.example/tenants/acme-data/",
  "scope": "files.read",
  "act": {"iss":"https://idp.example/", "sub":"agent-42"},
  "cnf": {"jkt":"JKT_K"}
}

This example uses Actor Profile's unclassified-actor processing and omits the recommended sub_profile. The configured issuer and client relationships resolve the Governance Tenant; the tenant-specific resource identifies Target Tenant acme-data.

A.1.3. Redemption Request and Response

RAS_CLIENT_ASSERTION authenticates the corresponding RAS client with iss=sub=analysis-api, aud=https://ras.example/, a short expiration, its own jti, and that registration's signing key. RAS_DPOP_PROOF is a fresh proof using K, with htm=POST and htu=https://ras.example/token.

POST /token HTTP/1.1
Host: ras.example
Content-Type: application/x-www-form-urlencoded
DPoP: RAS_DPOP_PROOF

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-dpop
&client_id=analysis-api
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth
%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=RAS_CLIENT_ASSERTION
&assertion=ID_JAG
&resource=https%3A%2F%2Fapi.example%2Ftenants%2Facme-data%2F

For the configured DPoP-protected resource, the response is:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "API_ACCESS_TOKEN",
  "token_type": "DPoP",
  "expires_in": 600,
  "scope": "files.read"
}

The access token uses typ=at+jwt and the following decoded payload:

{
  "iss": "https://ras.example/",
  "sub": "user-108",
  "aud": "https://api.example/tenants/acme-data/",
  "iat": 1789646464,
  "exp": 1789647064,
  "jti": "access-1",
  "client_id": "analysis-api",
  "scope": "files.read",
  "act": {"iss":"https://idp.example/", "sub":"agent-42"},
  "cnf": {"jkt":"JKT_K"}
}

The RAS translates Alice's subject and preserves the Agent Principal actor, which the dedicated client identifier does not replace. The access token is bound to K, the key used at both token endpoints.

A.1.4. Protected Resource Request

The client presents the access token and a new proof signed with K:

GET /tenants/acme-data/files/report-7 HTTP/1.1
Host: api.example
Authorization: DPoP API_ACCESS_TOKEN
DPoP: API_DPOP_PROOF

The decoded proof header and payload are:

{
  "typ": "dpop+jwt",
  "alg": "ES256",
  "jwk": {
    "kty": "EC",
    "crv": "P-256",
    "x": "K_X",
    "y": "K_Y"
  }
}
{
  "jti": "api-proof-1",
  "htm": "GET",
  "htu": "https://api.example/tenants/acme-data/files/report-7",
  "iat": 1789646468,
  "ath": "ATH_ACCESS_TOKEN"
}

K_X and K_Y are K's base64url-encoded public coordinates. ATH_ACCESS_TOKEN is the unpadded base64url-encoded SHA-256 hash of the ASCII access-token value (Section 4.2 of [RFC9449]). If the API requires a nonce, the proof also includes it.

The API validates the token and proof, including htm, htu, ath, and the match between the proof key and cnf.jkt. It then enforces the user permissions, actor gate, and tenant-specific audience. The client caches this token for Alice and agent-42 in acme-data (Section 8.1).

For explicitly configured bearer access, the response instead uses token_type=Bearer, the access token has no cnf, and the API request uses Authorization: Bearer API_ACCESS_TOKEN without a DPoP proof. DPoP at grant issuance and redemption remains required in this bound profile.

A.1.5. Renewal and Negative Tests

The redemption response contains no refresh token; after the access token expires, the client obtains a new ID-JAG (Section 8).

Each case below changes the walkthrough, or the named variant, as stated; all other credentials, proofs, and policy checks succeed. The last column is the required result. Token endpoint errors follow Section 4.7; API errors follow Section 7.6.

Table 23: Negative test cases
Changed condition Checked by Required result
Nonce retry with a fresh DPoP proof reuses the consumed analysis-auth-1 assertion IdP HTTP 400, invalid_client; regenerate client_assertion
Identity Binding disabled IdP HTTP 400, invalid_grant; successful authentication does not resolve the agent
Client Association for analysis-client disabled IdP HTTP 400, actor_unauthorized; no ID-JAG
Alice's Delegation Authorization for agent-42 permits files.read, and the client requests files.write IdP HTTP 400, invalid_scope; the authorization applies, and its scope ceiling excludes the request
The Delegation Authorization permits files.read files.write, policy categorically prohibits agent-42 from files.write, and the client requests files.write IdP HTTP 400, actor_unauthorized (Section 5.4)
The grant's scope claim is missing, empty, or not a string RAS HTTP 400, invalid_grant (Section 6.2)
The RAS has no authorized correlation for agent-42, or agent-42 is disabled there RAS HTTP 400, invalid_grant, not actor_unauthorized (Section 6.9)
Bound governed agent access required; grant has no cnf RAS HTTP 400, invalid_grant; no fallback to governed agent access
Grant has cnf.jkt; redemption omits the proof RAS HTTP 400, invalid_grant or invalid_dpop_proof; grant binding enforced
Governed agent access: the grant has no cnf, the resource requires DPoP-bound access tokens, and redemption omits the proof RAS HTTP 400, invalid_grant; no bearer token, and the same grant with a proof can still be redeemed (Section 6.7)
Access token used in another tenant where Alice and the agent also have permissions, with a fresh valid proof API HTTP 401, invalid_token; no operation performed
Governed agent access: the grant has no cnf, was redeemed once with a DPoP proof, and is presented again with a fresh proof by another key RAS HTTP 400, invalid_grant; an access-token proof does not make an unbound grant reusable (Section 6.2)
Self-acting variant (Appendix A.1.6) under governed agent access: the WAG has no cnf, was redeemed once, and is presented again RAS HTTP 400, invalid_grant; an unbound WAG is single-use (Section 6.2)
Delegated access token without act, presented to an API configured for the governed delegated population API HTTP 401, invalid_token; a missing act does not make the token self-acting (Section 7.1)
Platform JWT variant (Appendix A.2.1): the shared client platform-sso holds a token for agent-42 and starts an operation for another agent with the same scope Client Obtains a grant for that agent; a matching client_id and scope do not permit reuse (Section 8.1)
Platform JWT variant (Appendix A.2.1): the platform JWT fails validation IdP HTTP 400, invalid_request; no retry from authentication context or under another credential class (Section 5.3.5)
The API delegates evaluation to a policy service; an attribute derived from the request names agent-77 as the agent, and policy permits agent-77 but not agent-42 API HTTP 403, actor_unauthorized; the evaluation uses agent-42 from the validated act (Section 7.5)
The API's policy does not permit agent-42 to act for Alice, and the operation also needs files.write, which the access token lacks API HTTP 403, actor_unauthorized, not insufficient_scope; the actor gate comes first (Section 7.6)
The actor gate permits agent-42, and the operation needs files.write, which the access token lacks API HTTP 403, insufficient_scope
The actor gate permits agent-42, the token's scope covers the read, and Alice has no permission on report-7 API HTTP 403 with a challenge that carries no error attribute
The read carries an argument outside the operation's declared contract, and the API's policy does not permit agent-42 to act for Alice API The rejection of the invalid argument, such as HTTP 400 invalid_request, not actor_unauthorized; invalid arguments come before the actor gate
The API delegates evaluation to a policy service, which cannot be reached API HTTP 503; no operation performed and no denial reported
The read carries an argument outside the operation's declared contract, and the policy service cannot be reached API The rejection of the invalid argument, not HTTP 503; no unfinished check comes earlier (Section 7.6)
The access token is opaque, the API holds no usable cached introspection response for it, and the introspection endpoint cannot be reached or returns a response without a boolean active API HTTP 503; no operation performed, and not invalid_token (Section 6.8)
The introspection endpoint cannot be reached, and the DPoP proof's ath does not match the access token API HTTP 401 for the proof; the unfinished token validation is in the same row, not earlier (Section 7.6)
The access token is opaque, the API holds no usable cached introspection response for it, the introspection endpoint cannot be reached, and the read carries an argument outside the operation's declared contract API HTTP 503; the unfinished token validation comes earlier than the invalid argument
The policy service denies agent-42 under the actor gate, and its evaluation of Alice's own permissions cannot complete API HTTP 403, actor_unauthorized; no unfinished check comes earlier
The policy service cannot complete the actor gate, and Alice has no permission on report-7 API HTTP 503; the unfinished actor gate could come earlier than the user's denial
Platform JWT variant (Appendix A.2.1): Alice's access tokens for agent-42 and for another agent carry the same client_id, and the API's policy permits only agent-42 API HTTP 403, actor_unauthorized for the other agent; the client identifier does not stand in for the agent (Section 3.6.4)

The grant binding is enforced regardless of access-token protection, even when the resource accepts bearer access tokens or policy permits unbound grants.

A.1.6. Self-Acting Variant

This non-normative variant issues a WAG to the same dedicated client under Section 5.7, which then holds both kinds of Client Association; a deployment that wants the separation of Section 12.7 issues self-acting grants to another IdP client. The client authenticates with a fresh assertion, analysis-auth-3, and repeats the same compact JWT as the subject token as Section 5.7.1 defines:

POST /token HTTP/1.1
Host: idp.example
Content-Type: application/x-www-form-urlencoded
DPoP: IDP_DPOP_PROOF

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&requested_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Awag
&client_id=analysis-client
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth
%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=CLIENT_ASSERTION_3
&subject_token=CLIENT_ASSERTION_3
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt
&audience=https%3A%2F%2Fras.example%2F
&resource=https%3A%2F%2Fapi.example%2Ftenants%2Facme-data%2F
&scope=files.read

The IdP resolves analysis-client to agent-42. It verifies a Client Association for self-acting issuance and the agent's own authorization for files.read at the resource. It returns issued_token_type urn:ietf:params:oauth:token-type:wag with token_type N_A. The decoded WAG uses typ=oauth-wag+jwt and this payload:

{
  "iss": "https://idp.example/",
  "sub": "agent-42",
  "aud": "https://ras.example/",
  "iat": 1789646580,
  "exp": 1789646880,
  "jti": "wag-1",
  "client_id": "analysis-api",
  "resource": "https://api.example/tenants/acme-data/",
  "scope": "files.read",
  "cnf": {"jkt":"JKT_K"}
}

Redemption follows Appendix A.1.3, with a fresh client assertion and DPoP proof and the WAG as the assertion. The RAS correlates (https://idp.example/, agent-42) to service-principal-42 and applies its own policy for that principal. It issues an access token with sub service-principal-42, no act, the same audience, scope, and cnf, and no refresh token. The API enforces the agent's own permissions and the tenant; it applies no actor gate.

Because this access token shares the walkthrough's client registration and audience, the RAS and API need the additional bilateral contract of Section 10.2 to tell the two populations apart, such as authenticated introspection context; the absence of act alone does not (Section 7.1). A separate client registration or audience for self-acting tokens avoids that contract.

A.2. Input Variants

This non-normative variant changes only the agent-resolution input of Appendix A.1; the message sequence is unchanged, and the resulting actor is the IdP issuer and agent-42. Unlike the dedicated client, it sends actor-token parameters. [INPUTS] gives variants for its inputs.

Table 24: Platform JWT variant of the dedicated-client walkthrough
Variant Authentication and presentation Identity resolved
Platform JWT (AWS STS) STS JWT as actor_token with type jwt; separately configured client authentication Exact issuer, sub, and selector (Section 5.3.3)

The variant uses IdP client_id platform-sso, and:

  • Proof key: In the bound profile, K signs the issuance DPoP proof.

  • Lifetime: The input bounds the grant lifetime under Section 5.5.

  • Client Association: It needs a separate Client Association for platform-sso (Section 5.3.6).

  • Negative tests: The dedicated-client negative tests apply, except that replay rules follow the input specification.

One Agent Principal can carry a binding for each platform it runs on (Section 5.3.6), each keyed by its own issuer and selectors:

 Agent Principal: agent-42

 B1  JWT-SVID, orchestrated runtime                     enabled
     trust domain  platform.example
     SPIFFE ID     spiffe://platform.example/accounts/acme/
                     agents/workload-7

 B2  platform JWT, managed container service            enabled
     issuer        https://sts.amazonaws.com/
     sub           arn:aws:iam::123456789012:role/AgentRuntime
     selector      /https:~1~1sts.amazonaws.com~1/aws_account
                     = 123456789012

 B3  dedicated client, private_key_jwt                 disabled
     assertion iss  https://idp.example/clients/c1
     assertion sub  https://idp.example/clients/c1

B1 and B2 both resolve to agent-42, which the issued grant names (Appendix A.2.1 shows B2; B1 uses the JWT-SVID input of [INPUTS]). Disabling B3 stops new issuance through B3 only; an association naming B1 and B2 still authorizes them, subject to the remaining checks.

A.2.1. AWS Workload Identity Binding

This variant uses the AWS STS GetWebIdentityToken credential documented in [AWS-TOKEN-CLAIMS]. The Identity Binding names:

  • the configured STS issuer as credential authority;

  • the exact sub arn:aws:iam::123456789012:role/AgentRuntime;

  • the accepted audience https://idp.example/, the IdP's issuer identifier; and

  • the selector /https:~1~1sts.amazonaws.com~1/aws_account equal to 123456789012.

The selector addresses the string aws_account within the https://sts.amazonaws.com/ object; ~1 escapes each slash in that member name.

If several agents share this role, issuer and sub identify the shared IAM principal, not an individual agent. Distinct Agent Principals then need distinct credential identities or additional trusted selectors. A caller-supplied agent name does not provide that distinction. This variant covers evidence resolution, not a product's end-to-end conformance. User-access-token OBO composition remains outside the scope of this document (Appendix B.3).

Appendix B. Differences, Dependencies, and Excluded Compositions

This informative appendix records how this document differs from its base specifications, what it depends on, and the compositions it does not define. They were assessed against WAG-02, ID-JAG-06, JWT DPoP Grant-02, ICA-02, Actor Profile-01, SPIFFE OAuth-03, ATTEST-12, CIMD-03, and Client Instance Identifiers-01.

B.1. Differences from Base Specifications

This profile fills the gaps of Section 4.1.1 as follows. The referenced sections define each requirement.

Table 25: Additions and narrowings to the base specifications
Area Profile requirement Defined in
Actor extension Identity Binding resolves the agent; a separate Client Association authorizes client use Section 5.3.6
Dedicated-client input Resolved from authenticated client context; issuer identifier as sole assertion audience; single-use jti Section 5.3.2, Section 4 of [RFC10070]
Other authentication-context inputs Resolved from the identity validated by SPIFFE or Client Attestation authentication Section 5.3.5; the inputs are defined in [INPUTS]
Actor representation One actor: Agent Principal as act.sub, IdP as act.iss; replaces Actor Profile's credential-to-actor copying Section 5.6.4
Request narrowing Configured resolution mode; one resource; non-empty scope; actor-token parameters required in presented-evidence mode and rejected otherwise; no incoming actor chain Section 5.2, Section 5.6.1, Section 5.3.5
Identity and client binding Users and agents resolved separately; downstream client_id from an authoritative client-registration association Section 5.6.3, Section 6.4.2, Section 6.3, Section 5.1
Multi-tenant issuers tenant also names the agent's Governance Tenant: no ID-JAG for an agent of a tenant other than the user's, tenant in every WAG, and the RAS's tenant rule of Section 4.4.1 of [ID-JAG] applied to a WAG. A grant carrying tenant is from a multi-tenant issuer whatever the RAS's configuration says, where Section 4.4.1 of [ID-JAG] conditions its rule on the RAS knowing that Section 3.3
Grant narrowing One resource URI (a string; singleton arrays accepted), scope constraints, input-specific expiration limits; single use unless bound; DPoP and cnf.jkt in the bound profile Section 5.5, Section 5.6.5, Section 6.2, Section 4.4
Grant binding cnf.jkt from a DPoP proof, redeemed with jwt-dpop; no x5t#S256 certificate binding (Section 9.11.2 of [ID-JAG]) Section 4.4, Section 6.1
Redemption client authentication Required for every grant, including a bound grant; Section 4.4 of [ID-JAG] lets a bound ID-JAG stand in for it, and Section 4.1 of [JWT-DPOP-GRANT] makes it optional Section 6.2
Resource processing Actor and tenant context preserved; user authority and actor gate enforced with the selected token protection Section 6.6, Section 7
Refresh narrowing Explicit policy, client binding, preserved proof binding and profile, finite absolute authorization expiration Section 8.2
Error processing invalid_grant, not RFC 8693's invalid_request, for a valid subject or actor credential that resolves no user or no active binding, agent, or tenant; actor_unauthorized for a denied resolved actor, where Section 4.3.4.3 of [ID-JAG] profiles access_denied for a client or user that is not authorized Section 5.8
Redemption errors invalid_grant for an unresolved or disabled user or an uncorrelated or disabled agent, where Section 4.4.3 of [ID-JAG] profiles access_denied for a valid ID-JAG that is not authorized; actor_unauthorized for an actor-gate refusal Section 6.9
Profile discovery Governed profiles in existing ID-JAG metadata; trusted policy sets the minimum Section 9.2, Section 4.8
Client ID Metadata Document Listed methods include, for each server using the document, one other than none that it accepts; a server never selects none, and reads token_endpoint_auth_method where token_endpoint_auth_methods_supported is absent, which Section 5 of [CIMD] permits; invalid_client for a listed private_key_jwt without jwks or jwks_uri Section 9.2.2
DPoP at endpoints without DPoP A request carrying a DPoP proof is rejected with invalid_request, not ignored Section 4.4
Time claims iat later than the current time plus permitted clock skew is rejected Section 4.6
Introspection caching A cached active response is not used beyond exp or the disablement freshness limit, narrowing Section 4 of [RFC7662] Section 7.2
Denials without a remedy A challenge without an error attribute, a restriction of Section 3 of [RFC6750] Section 7.6
Hidden targets The error table's responses take precedence over the 404 that Section 15.5.4 of [RFC9110] permits Section 12.3
WISE revocation events Applied only within what configuration trusts the sending authority for, where [WISE] has a receiver reject every credential of a named trust domain Section 4.6

For self-acting access, this profile composes [WAG] as follows (Section 4.2):

Table 26: Governed composition of WAG
Area WAG-02 This profile
Issuer The Workload Identity Provider of the Platform that created the agent The governing IdP, through token exchange (Section 5.7)
Client authentication Not required; client_id carries no meaning Required at issuance and redemption; client_id is the client's registration at the RAS (Section 6.2)
Client registration Never required per Agent Required for the redeeming client (Section 6.2). Shared clients can redeem grants for multiple agents, and several dedicated clients can map to one registration (Section 5.1), but a RAS can still give each agent's client its own. WAG's prohibition is not adopted
Grant binding Bearer; proof of possession open DPoP under Section 4.4, required for the bound profile; a bound WAG is redeemed with jwt-dpop, where Section 5 of [WAG] uses jwt-bearer (Section 6.1)
Replay Open Unbound grants are single-use (Section 6.2)
resource Recommended, not required Exactly one (Section 5.2)
Previously unseen agents Accepted on first assertion Accepted where resource policy permits just-in-time correlation, off by default; the created record is keyed by the exact pair, has a local principal of its own, and authorizes nothing (Section 6.3.1)
Shared issuers A claim registered for each Workload Identity Provider tells providers sharing one issuer apart; dedicated issuers, or else the ID-JAG tenant claim, are RECOMMENDED (Section 6.3 of [WAG]) tenant, set to the agent's Governance Tenant, required in a WAG from a multi-tenant issuer; the RAS trusts iss and tenant together (Section 3.3)
Refresh tokens Prohibited Prohibited

B.2. Upstream Dependencies

Table 27: Upstream dependencies
Specification What this profile needs Consequence until resolved
WAG Alignment on protection (Appendix B.2.1) Generic WAG support does not imply the governed composition (Section 4.2)
ID-JAG and JWT DPoP Grant One error for a bound grant redeemed without a proof: invalid_grant in Section 9.11.1.2.2 of [ID-JAG], invalid_dpop_proof in Section 5 of [JWT-DPOP-GRANT] Either error is permitted (Section 4.4)
Actor Profile A reusable principal-resolution extension point; Section 6.4.1.2 of [ACTOR-PROFILE] permits authentication-context reuse only with the same assertion as actor_token Local mapping (Section 5.6.4); generic Token Exchange or Actor Profile support does not advertise resolution from authentication context
CIMD Section 6 of [CIMD] to apply its response_types intersection to authorization requests only; it rejects, with invalid_client, any request whose document and server share no response type A server that supports no response type, such as one without an authorization endpoint, rejects every Client ID Metadata Document client, which registers separately there (Section 9.2.2); every server rejects a document whose response_types is empty

B.2.1. WAG

In WAG terms, the IdP is the Workload Identity Provider that issues the grant (Section 2 of [WAG]), and Section 5.7 defines that issuance with the token exchange that Section 5 of [WAG] anticipates. That section leaves how an Agent obtains a grant otherwise out of scope, so the issuance details of Section 5.7 need no change to WAG. The open item with WAG is DPoP binding (Section 4.4).

Two items are open in this family: self-acting Client Associations ([AGENT-MANAGEMENT]), and a WAG lifecycle composition, since [AGENT-LIFECYCLE] defines no WAG wire composition and revoking one WAG is deployment-specific. Until these close, a self-acting claim has no management path for client use or lifecycle composition in this family to be tested against.

B.3. Excluded Compositions

This document does not define the following compositions:

Table 28: Excluded compositions
Composition Boundary in this document
Approval before issuance or redemption Defined for governed issuance, including continuation, and for governed redemption at the RAS, in [OVERSIGHT]
Asynchronous approval with [AROP] At the RAS, defined for deferred redemption in [OVERSIGHT], without continuation from the resulting authorization; at the IdP, external approval follows Section 12.9, Section 3.6.3, and Section 5.4
Continuation with [ICA] Defined for governed grants, including through gateways, in [CONTINUATION]; renewal without continuation follows Section 8
General WIMSE WIT/WIC inputs Only the SPIFFE forms in [INPUTS] are defined
Instance context in an ID-JAG or WAG, or preserved across domains, under [INSTANCE] The RAS conveys only an instance it validated (Section 6.6); workload evidence resolves the agent, and a shared workload identity does not distinguish replicas [SPIFFE-CONCEPTS]
Mutual-TLS-bound ID-JAG Bound grants use DPoP; mutual TLS can protect access tokens (Section 6.7), except after a deferred redemption, which [OVERSIGHT] requires to be DPoP-bound
Authorization details without scope Scope is required; the scope-free mode of [RFC9396] is not defined
Grant key transition A bound grant is redeemed with proof of its own key (Section 4.4); no transition to another key is defined
Portable authorization deadlines ID-JAG exp limits redemption only; downstream lifetimes follow RAS policy (Section 3.6.3)
Public or unattested native agents Both grant paths authenticate the client (Section 9.1); a client that uses none and presents no attestation from a configured attester ([INPUTS]) has no governed grant path, and enrolling a key is out of scope (Section 1.1)
User access tokens as subjects, as in deployed on-behalf-of (OBO) flows such as [AWS-AGENTCORE-OBO] Subjects follow Section 5.6.2; accepting an access token needs eligibility, audience, resolution, sender-constraint, and authority rules coordinated with ID-JAG

Appendix C. Document History

RFC Editor: Remove this section before publication.

Acknowledgments

The author thanks Jeff Malnick for review and discussion of this profile.

Author's Address

Karl McGuinness
Independent