| Internet-Draft | Agent Principal Lifecycle | November 2026 |
| McGuinness | Expires 15 May 2027 | [Page] |
This document profiles SCIM for provisioning issuer-qualified, enterprise-governed Agent Principals into a resource domain and applying administrative disablement to OAuth authorization. Existing SCIM Events can accelerate reconciliation; existing session-revocation events can invalidate identified authorization sessions independently of principal state.¶
The profile defines identity correlation, receiver actions, and the limits of propagation and resource enforcement. It defines no new SCIM schema, event type, eligibility lease, or authorization timestamp. Current administrative state does not establish a history of revocation.¶
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-lifecycle.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-mcguinness-oauth-governed-agent-lifecycle/.¶
Discussion of this document takes place on the System for Cross-domain Identity Management Working Group mailing list (mailto:scim@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/scim/. Subscribe at https://www.ietf.org/mailman/listinfo/scim/.¶
Source for this draft and an issue tracker can be found at https://github.com/mcguinness/agent-principal-profiles.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 15 May 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Agent Principal Federation [FEDERATION] separates agent identity, client authority, user delegation, and resource authorization. It identifies an Agent Principal by the pair (IdP issuer, agent identifier), independently of the client or workload credential used to resolve it.¶
For delegated access, the Identity Assertion JWT Authorization Grant (ID-JAG) [ID-JAG] carries that principal as the actor. The resource domain correlates the actor with its local agent record.¶
Across the family, [AGENT-MANAGEMENT] establishes the relationships at the IdP, [FEDERATION] exercises them to obtain authorization, and this document carries the principal's administrative state into the resource domain and revokes what depends on it.¶
This companion defines how a resource domain provisions that principal and applies changes to its administrative status. The responsibilities are:¶
| Mechanism | Responsibility |
|---|---|
| SCIM Agent [SCIM-AGENT] | Provision and update the local representation, including active
|
| SCIM Events [RFC9967] | Notify the receiver that authoritative provisioning state changed |
| Session revocation | Invalidate identified authorization sessions without changing the principal's administrative status |
| OAuth enforcement | Apply local eligibility and revocation at issuance, refresh, introspection, and API access |
Enterprise IdP / connector Resource domain
+------------------------+ +----------------------+
| Agent Principal | ---- SCIM ----> | Local agent principal|
| Administrative state | | Correlation + active |
+------------------------+ +-----------+----------+
| |
+---- change notice --> reconciliation v
RAS issuance / refresh
+---- session revocation ------------> session invalidation
|
v
API token enforcement
SCIM is the provisioning baseline. Shared Signals is an optional addition, profiled in Appendix A using existing event types. A deployment can use direct SCIM updates, event-driven reconciliation, or both, provided that they apply the same authoritative administrative decisions. Events trigger retrieval of current state rather than carrying it: a late notice resolves to the current decision, whereas a late activation applied as an instruction would revive a principal that was since disabled. That asymmetry is the design's safety property. Current state alone would lose a disablement that a reactivation has since superseded, so the IdP delivers that disablement first, by a SCIM write, and it invalidates the authorization issued before it (Section 3.1).¶
Disabling a principal and revoking a session are separate actions. Once applied, disablement prevents new authorization and invalidates existing RAS authorization for that principal. Re-enablement permits new decisions; it does not restore revoked sessions. Neither an event acknowledgment nor a SCIM response proves that every API has stopped accepting issued tokens.¶
Disablement is one of several revocation boundaries. Disabling the principal, disabling an Identity Binding, withdrawing a Client Association or a delegation, revoking a workload credential, and revoking one grant each reach different authorization (Section 8). The resource domain also keeps its own authority: a Local Suspension denies the agent there regardless of upstream state, and upstream activation cannot clear it.¶
This profile covers IdP-to-resource-domain provisioning for delegated Federation, and a platform applying the IdP's administrative state to agents it hosts (Section 9). It does not define:¶
Platform enrollment or administration of Identity Bindings and Client Associations; [AGENT-MANAGEMENT] defines that separate interface.¶
A new lifecycle state machine, signed eligibility lease, authorization cutoff, or distributed ordering protocol.¶
Automatic translation of binding or delegation withdrawal into all affected grants, or a WAG wire profile. A known ID-JAG can be revoked selectively under Appendix A.4.¶
A guarantee that a disable-and-reenable cycle invalidates a grant issued before the disablement and first redeemed after the reactivation (Section 11.3).¶
Runtime containment: stopping executions, tool calls, or network access, or rejecting offline tokens before they expire. Administrative disablement stops new authorization and revokes RAS sessions; immediate containment needs complementary runtime enforcement (Section 7.1).¶
Section 6, Section 7, and Section 11.3 state the recovery and enforcement limits.¶
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.¶
Agent Principal, Governance Tenant, Target Tenant, and resource authorization server (RAS) follow [FEDERATION]. SCIM terms follow [RFC7643] and [RFC7644].¶
The IdP governing the Agent Principal. An authorized connector can provision its decisions into the resource domain.¶
The resource-domain SCIM service provider and the components applying accepted changes at the RAS, or, for a platform-hosted agent, in the platform's own authorization (Section 9). They form one administrative deployment; they need not run in one process. It is the resource-domain counterpart of the IdP Service Provider in [AGENT-MANAGEMENT].¶
Trusted configuration identifying one governing IdP issuer, its tenant where the issuer is multi-tenant ("Canonical Identity and Tenant Boundaries" in [FEDERATION]), and one receiving Target Tenant, together with the connectors authorized to manage their correlation and administrative state. This is the resource-domain counterpart of the IdP-side Provisioning Domain.¶
RAS state retaining the identity and authority derived from a grant, including any associated refresh authorization and access tokens. This is a processing concept, not a new token or wire identifier.¶
A resource-domain restriction independent of the Governing IdP's administrative state. Upstream activation cannot clear it.¶
Conformance requires the SCIM provisioning and OAuth receiver behavior in this document. Events are optional; a deployment using them MUST apply Appendix A. Support for events alone is not conformance to this lifecycle profile. A platform applying state to agents it hosts conforms through Section 9 instead of the OAuth receiver behavior.¶
Before provisioning, the parties MUST establish:¶
The Provisioning Domain and authenticated connectors authorized for it.¶
The SCIM base URI and access controls that select that context.¶
The RAS and API token populations to which lifecycle enforcement applies.¶
Reconciliation responsibilities, stale-state policy, and resource enforcement settings under Section 6 and Section 7.¶
Whether the Receiver permits just-in-time correlation (Section 4.1) and, if it does, the resources of its Target Tenant.¶
A connector authorized for one context MUST NOT modify another context's principal or correlation. Multiple writers MAY represent the same Governing IdP, but MUST reconcile against its current decisions rather than replay queued activation writes after newer disablement, and deliver a pending invalidation first (Section 3.1). SCIM conditional updates protect receiver resource versions; they do not order independent source decisions.¶
The IdP continues to enforce current eligibility when issuing grants under [FEDERATION]. This profile adds resource-domain application of that state; it does not make SCIM availability or event delivery part of client authentication.¶
The Governing IdP, directly or through its connector, MUST apply each change to a provisioned Agent Principal's administrative status to every resource domain it has provisioned for that principal, by a SCIM write or by a subscribed event that triggers reconciliation, as Section 3.1 requires, and SHOULD do so promptly after the decision. Where grant-derived revocation under Appendix A.4 is enabled, the IdP MUST retain the identifiers of the ID-JAGs it issued under each delegation, Identity Binding, and Client Association, so that withdrawing any of them can be propagated to the authorization derived from those grants.¶
Where a Receiver permits just-in-time correlation, an agent can hold
authorization in its domain before the Governing IdP has provisioned it
there. Once the IdP has issued a grant for an Agent Principal, as the
act agent of an ID-JAG or the subject of a WAG, for a resource in the
Target Tenant of a Provisioning Domain whose Receiver permits
just-in-time correlation, the IdP MUST provision that principal in the
domain (Section 4.1). It MUST do so even if it fails between issuing the
grant and starting to provision. Recording the obligation durably
before issuing the grant meets this; an obligation recorded for a grant
that was never issued only provisions the agent early.¶
A disablement that a later reactivation supersedes still has to take effect at the Receiver, because it invalidates the authorization issued before it (Section 5.2); delivering only the current status would lose it. For an Agent Principal and a Receiver, a pending invalidation exists from a decision to disable the principal, made once the IdP has provisioned the principal in that domain or owes provisioning there, until the Receiver returns success for a disablement that the IdP delivered after the decision.¶
When it delivers a principal's administrative status to a Receiver, the IdP:¶
MUST first deliver any pending invalidation as an applied
disablement: a SCIM write that sets active to false or, when it
provisions the principal, a create with active false.¶
MUST NOT deliver an activation that a later decision superseded.¶
MUST serialize delivery for the principal and the Receiver, and MUST NOT lose a pending invalidation when one writer replaces another. A single writer per principal is one way to meet this.¶
An event that only triggers reconciliation does not discharge a pending invalidation: the Receiver retrieves current state, in which the principal can be active again. After the applied disablement, the IdP delivers the current status by either means.¶
A disablement and a reactivation that both occur while delivery is
down therefore reach the Receiver as active false and then active
true: the disablement invalidates the earlier authorization, and the
reactivation permits new decisions only. A disablement, a reactivation,
and a second disablement reach it as one disablement, with no
activation.¶
A retried disablement can cost availability. If the success response to a disablement write is lost, the IdP still holds the pending invalidation and retries the write. When the Receiver's own reconciliation has meanwhile found the principal active, the retry invalidates the authorization issued in between. It restores no revoked authority, and once it succeeds the IdP delivers the current status, so new decisions follow.¶
The federation identity remains the exact pair (IdP issuer, Agent Principal identifier). A Target Tenant scopes local policy and correlation; it is not an additional component of that identity.¶
For this provisioning interface:¶
The governing issuer MUST come from the authenticated Provisioning Domain, not from a caller-selected attribute.¶
The connector MUST set the Agent's externalId to the exact Agent
Principal identifier in that issuer's namespace.¶
The Receiver MUST enforce uniqueness of externalId within that
context, including concurrent creates. This is an explicit narrowing
of SCIM's client-scoped externalId behavior.¶
Once established, the pair MUST NOT change through a resource update.
Attempts to change externalId use SCIM's mutability error.¶
At a multi-tenant issuer, an Agent belongs to the Provisioning Domain
of its Governance Tenant, the issuer tenant that the agent's grants
name in tenant. A connector authorized for another tenant of the
same issuer is authorized for another context.¶
Thus, externalId alone is not a globally qualified identity. A
deployment with multiple IdPs MUST retain the context with each
resource; it cannot merge records on equal externalId values across
issuers. This use of externalId is specific to the IdP-to-resource
interface; Section 10.1 maps it from the IdP-side
interface of [AGENT-MANAGEMENT].¶
For delegated access, the RAS MUST resolve the validated ID-JAG's
act.iss and act.sub to this pair within the authorized Target
Tenant. It MUST NOT use the user subject, OAuth client, display name, or
token issuer as a substitute. Comparisons are exact, without case
folding or URI rewriting.¶
The Receiver MUST correlate the pair with at most one local agent principal in the Target Tenant. An existing service principal MAY supply that local representation, but attaching it requires explicit local authorization. The SCIM Agent is then a management view of that same principal, not a second authorization identity.¶
Federation requires no provisioning protocol. This profile adds a requirement: the RAS MUST have the authorized local correlation before accepting a grant involving the agent. A missing or ambiguous correlation fails under Federation's identity-resolution error rules. [FEDERATION] lets resource policy establish that correlation just in time from a validated grant; Section 4.1 states what a conforming Receiver adds.¶
[FEDERATION] defines just-in-time correlation: the resource-policy gate per governing issuer, or issuer and tenant at a multi-tenant issuer, and Target Tenant; exact keying by the pair; and the local restrictions and retained revocation state applied before issuance. A Receiver that correlates agents that way without supporting this interface uses those rules alone and does not conform to this profile.¶
A conforming Receiver that permits just-in-time correlation MUST NOT
expose a record it created that way through SCIM before the Governing
IdP provisions its pair (Section 3.1). Until then the record has no
SCIM active. Its eligibility, which local policy sets, is one of the
local restrictions that Federation requires the RAS to apply, as is
Local Suspension.¶
An otherwise valid and authorized create of an Agent whose externalId
is that pair's agent identifier, in the Provisioning Domain of the
triggering grant's issuer and, at a multi-tenant issuer, its tenant,
MUST NOT fail solely because the record exists. The Receiver MUST bind
the new resource to the record's local principal, creating no second
one, and MUST keep that principal's local restrictions and retained
revocation state. Ordinary SCIM validation still applies, including
required attributes and agentUserName uniqueness. The create's
active value is an administrative status change to that principal
(Section 5.2), so an inactive create invalidates the authorization
issued before it.¶
Once the record is adopted this way, the Agent is provisioned like any
other. A later create for the same pair fails with uniqueness, and
the connector finds the resource with the externalId query in Section 5. Of
concurrent creates for the pair, one binds the record and the others
fail the same way (Section 4). A record not yet adopted has never
been reconciled, so a stale-state interval claimed under Section 6
runs from its creation. A grant does not carry the IdP's administrative
status, so just-in-time correlation does not replace provisioning for
disablement.¶
The interface uses /Agents and the attributes of [SCIM-AGENT],
including required agentUserName, plus the common attributes of
[RFC7643]. It defines no extension schema. The agentUserName
uniqueness that [SCIM-AGENT] requires applies within the Provisioning
Domain: this interface reads its server uniqueness that way, because
access controls, not only a base URI, can select the context
(Section 3). Receivers MUST support creation, retrieval,
filtering by externalId, PUT, PATCH, and deletion using [RFC7644].
The Receiver MUST advertise filtering, PATCH, and ETag support in
/ServiceProviderConfig.¶
Creation and PUT requests MUST contain externalId and an explicit
boolean active; PATCH removal of either is invalid. Only active:
true permits authorization evaluation. Missing required values use
invalidValue; conflicting correlation values use uniqueness,
following SCIM's error model.¶
Within the authenticated Provisioning Domain, a connector can reconcile using:¶
GET /scim/v2/Agents?filter=externalId%20eq%20%22agent-42%22¶
The Receiver MUST restrict the result to that context. Names, owners, groups, and other descriptive attributes do not select the governed identity or grant delegation.¶
Versions, ETags, If-Match, the conditional requirement for activating
an inactive resource, and incremental reads on meta.lastModified
follow the common provisioning conventions of [OAUTH-CLIENT]. In this
interface, meta.version is not a lifecycle counter and
meta.lastModified is not a source decision time or a grant-revocation
boundary; a descriptive edit can change both without affecting
authorization. SCIM modification times, SET issuance times, and event
timestamps MUST NOT be treated as interchangeable grant-issuance
cutoffs under this profile.¶
The Receiver MUST authorize changes to active separately from
permission to edit descriptive attributes. It MUST preserve Local
Suspension and resource permissions independently of upstream
administrative updates.¶
| Applied action | New RAS authorization | Existing RAS authorization |
|---|---|---|
Create or set active: true
|
Evaluate correlation, local status, and all Federation checks | Does not restore previously revoked sessions |
Set active: false
|
Deny grant redemption and refresh involving this principal | Revoke associated authorization sessions |
| Delete the local Agent | Deny because the authorized correlation is absent | Revoke associated authorization sessions |
| Change display name, owner, or other descriptive data | No implicit change to eligibility or delegation | No implicit revocation or grant of authority |
The durable restriction rule of [OAUTH-CLIENT] applies to disablement and deletion with the RAS decision point as the decision point; an inactive record or a separate deny marker can provide that state. If session invalidation is asynchronous, a local restriction MUST deny use of the affected sessions until invalidation completes. API observation of revocation follows Section 7.¶
Reactivation MUST NOT cancel pending invalidation or restore revoked sessions. Recreating a deleted representation likewise does not restore revoked authorization. Receivers MUST retain revocation state for as long as affected tokens or refresh authorizations could otherwise be accepted. This does not require retaining the deleted SCIM resource.¶
Deleting a local representation does not prove that the IdP retired the Agent Principal globally. Permanent retirement and non-reassignment remain authority responsibilities under [FEDERATION].¶
The SCIM active value reports administrative state received through
this interface. Effective eligibility also requires an authorized
correlation, no Local Suspension, and applicable resource policy. Local
Suspension need not be exposed through this SCIM interface.¶
Owners provide accountability; they are not automatically user delegators. Group membership has only the meaning assigned by local policy. Neither provisioning nor a successful administrative write opens the actor gate.¶
SCIM events trigger authoritative reconciliation; CAEP events revoke identified authorization. Appendix A defines their optional composition. Neither event delivery nor current SCIM state supplies a complete history.¶
For event-driven reconciliation, the parties MUST configure the source
SCIM service, retrieval authorization, and mapping from its resource
identifier to the qualified agent and Target Tenant. The source and
receiver SCIM id values need not match. A GET of the receiver's own
replica does not establish the governing IdP's current state.¶
Direct SCIM connectors and event-driven workers MUST coordinate local writes through the same correlation and conditional-update rules (Section 10.2).¶
Deployments SHOULD periodically reconcile managed principals even when an event stream appears operational. They MUST document how source outages and incomplete reconciliation affect continued reliance on local state. A deployment claiming a maximum stale-state interval needs an authoritative revalidation mechanism and a policy that denies new authorization and refresh when that interval expires. Receiving traffic or reading the Receiver's replica alone does not satisfy such a revalidation policy.¶
Transport failure, access denial, and partial list results MUST NOT be interpreted as authoritative deletion. They leave reconciliation incomplete. An authoritative absence for a previously mapped resource requires disablement or deletion of its local representation; the Receiver MUST distinguish that absence from a visibility or authorization failure.¶
A stream verification event proves neither an individual agent's status nor completion of resource enforcement. A delivery acknowledgment confirms acceptance under the transport, not API denial.¶
The RAS requirements that apply administrative state to authorization
are specified in [FEDERATION]: checking current locally applied
eligibility at redemption and refresh, retaining the association needed
to invalidate authorization by qualified agent and Target Tenant, and
not letting refresh bypass a restriction or restore revoked
authorization. Authorization invalidated under those rules is not active
for token introspection [RFC7662]. This document supplies the
provisioning and signals that feed those decisions and adds no grant
issuance-time claim or timestamp comparison. The optional capability in Appendix A.4 additionally
retains the ID-JAG issuer and jti. Once reactivated, the principal may
establish new authorization under ordinary Federation processing,
subject to Section 11.3. Existing tokens whose agent
correlation cannot be established MUST NOT be represented as covered by
this profile.¶
The API applies Federation's token validation, actor gate, tenant, and sender-constraint rules. The following are deployment choices, not new conformance levels:¶
| Resource processing | When an applied RAS revocation becomes visible |
|---|---|
| Introspection on each request | On the next successful authorization check; a failed or timed-out check cannot authorize the request |
| Cached introspection | After any permitted active-response cache entry expires or is invalidated |
| Offline JWT validation | At token expiration, unless an independent local restriction takes effect earlier |
Caching follows Federation and Section 4 of [RFC7662]. In particular, cached active responses cannot outlive token expiration or the configured freshness limit. Offline validation does not consult principal lifecycle state by itself. The RAS and API MUST configure token lifetimes, expiry leeway, and caching consistently with their accepted revocation delay.¶
Deployments SHOULD document their expected and maximum disablement delays, including propagation, reconciliation, local application, token lifetime, and caching. A SCIM acknowledgment is not the starting point of an end-to-end guarantee from the governing IdP's original decision. Without a bound on propagation and enforcement, this profile claims no finite end-to-end denial bound. A local stale-state restriction can limit new issuance; it does not by itself revoke already-issued tokens.¶
| Change | Boundary |
|---|---|
| Disable the Agent Principal | Stop new grants through every binding and client; once applied at the Receiver, deny redemption and refresh and revoke its sessions (Section 5.2) |
| Disable an Identity Binding | Stop new grants through that binding; other bindings remain independent |
| Withdraw a Client Association | Stop that client use; do not infer agent-wide disablement |
| Revoke a user's delegation | Affect that delegation, not unrelated users or self-acting authority |
| Revoke a workload credential | Apply credential validation and IdP policy; do not automatically retire the Agent Principal |
| Revoke a known ID-JAG | Invalidate its derived sessions; do not change principal eligibility |
| Apply Local Suspension | Deny the agent in this resource domain regardless of upstream state; upstream activation cannot clear it |
[FEDERATION] defines the binding, association, and delegation relationships. Grant-derived revocation under Appendix A.4 can target known ID-JAGs. Determining all grants affected by withdrawal of a binding or delegation remains an IdP responsibility; the agent identity alone cannot identify that set. OAuth token revocation [RFC7009] can revoke a known token at its issuing server but is not a principal-provisioning or cross-domain notification protocol.¶
[WISE] can inform the IdP about workloads and credentials. The IdP evaluates those changes against its Identity Bindings before deciding on agent-wide action. Sharing a credential source does not merge principals; losing one credential does not necessarily disable a principal with other valid bindings.¶
The self-acting WAG realization in [FEDERATION] correlates the same
Agent Principal with the same local principal. Delegated access preserves the qualified
actor in act; self-acting access represents the correlated agent as a
local subject. Their authority remains distinct. This document defines
no [WAG] wire composition or additional WAG claim.¶
A platform that hosts agents and authorizes them for its own resources can register them with the IdP for governance ([AGENT-MANAGEMENT]). The platform is then also the Receiver for those agents, and its own resources form the resource domain. The IdP issues those agents no grants, so Section 7 does not apply; the platform applies the same outcomes in its own authorization.¶
For a registered agent:¶
Correlation: The platform correlates its agent with the qualified Agent Principal identifier that registration returned. Just-in-time correlation does not apply.¶
Administrative state: The platform obtains the Agent's active
value from IdP provisioning under Section 5, or by retrieving its
registered Agent from the IdP when a change notice (Appendix A.2)
or periodic reconciliation (Section 6) indicates a change.¶
Disablement: Once it applies active: false, the platform MUST
deny new authorization for the agent and revoke the agent's existing
authorization in its own authorization system. This includes an Agent
registered inactive pending approval ([AGENT-MANAGEMENT]).
Reactivation permits new decisions; it does not restore revoked
authorization.¶
Local control: The platform's own deactivation or suspension of the agent is a Local Suspension, which upstream activation cannot clear. Effective eligibility follows Section 5.3.¶
The IdP is not part of the platform's runtime path. The platform authorizes its agents from locally applied state, and an unreachable IdP neither disables nor re-enables them; transport failures follow Section 6. A deployment that needs to bound how long the platform relies on unrefreshed state uses the revalidation policy of Section 6, which then denies new authorization when that bound expires.¶
Audit records and telemetry about a registered agent's actions SHOULD carry the qualified Agent Principal identifier alongside the platform's own identifier for the agent, so that the IdP and other consumers can correlate them. This document defines no log or telemetry format.¶
These considerations add no requirements. They describe how a connector and a Receiver meet the requirements of the sections cited.¶
When the source uses [AGENT-MANAGEMENT], the connector maps the interfaces as follows; it does not copy the source Agent unchanged:¶
| IdP-side source | Resource-domain use |
|---|---|
| Configured governing issuer | Issuer established by the authenticated Provisioning Domain |
AgentFederation.subject
|
Exact value of the destination Agent's externalId
|
Agent active
|
Upstream administrative state; local restrictions remain independent |
Agent displayName
|
The same descriptive value; it selects nothing (Section 5) |
Agent agentUserName
|
A value unique in the destination Provisioning Domain: the source value, or one the connector assigns; it selects nothing (Section 5) |
Agent id
|
Source-resource correlation, not the destination SCIM id
|
Platform-assigned externalId
|
Platform correlation only; not the federated principal identifier |
This mapping applies equally to direct provisioning and event-driven
reconciliation. It introduces no destination attributes beyond those of
[SCIM-AGENT]. A platform's externalId at the IdP remains its own
provisioning correlation value. The mutability differs for the same
reason: at the platform-to-IdP interface of [AGENT-MANAGEMENT] it is
the connector's record key and stays readWrite; here it carries the
principal identifier and is immutable once established (Section 4).¶
Names follow the destination's uniqueness, not the source's. At the
IdP, agentUserName is unique within a Provisioning Domain scoped to
one Provisioning Client ([AGENT-MANAGEMENT]), so Agents of two such
domains can share a name and still reach one destination Provisioning
Domain, where it must be unique (Section 5). A uniqueness error on a
create whose externalId query finds no Agent is such a collision. The
connector then assigns a destination-unique agentUserName, and reuses
the value it assigned when it retries. displayName is copied
unchanged, and correlation stays on externalId.¶
Connectors for /Agents are purpose-built for this resource; User and
Group support alone is insufficient.¶
A reconciliation worker reads the Receiver's ETag before retrieving source state, then uses that ETag for its conditional write. After a conflict, it retrieves both again. This prevents an in-flight fetch from overwriting a later local restriction; it does not create a cross-domain transaction or establish that a remote source replica is current (Section 6).¶
Provisioning writers can enable principals and change eligibility. Their
authority MUST remain scoped to the configured issuer, its tenant at a
multi-tenant issuer, and Target Tenant.
An event signature, matching display name, or equal externalId outside
that context does not establish permission to correlate a principal.¶
Conditional writes prevent stale updates to a known receiver version; they do not prove that a connector consulted current source state. Compromised or stale connectors can re-enable principals if their write permission remains valid. Administrative authorization, reconciliation, and local suspension therefore remain separate controls.¶
Event trust, provisioning permission, and session-revocation authority remain separate. Receivers MUST constrain source retrieval and credential forwarding to authorized endpoints. A signed subject does not authorize arbitrary URL retrieval or cross-tenant revocation.¶
Event loss and reordering can delay enforcement. Receivers SHOULD retry reconciliation and monitor failures. Revocation state is retained, including across restarts, as Section 5.2 requires. Recovery from lost revocation state MUST NOT silently restore sessions represented as revoked. The explicit limit in Section 11.3 is particularly relevant to unattended refresh.¶
Current state does not establish transition history. If disablement and reactivation both occur between successful observations, a later active resource does not reveal the missed revocation. A different ETag can also result from an ordinary descriptive edit; it does not identify that history. Section 3.1 therefore does not rely on observation: the Governing IdP delivers each disablement it decided as an applied one, even after it has reactivated the principal, so the Receiver invalidates the authorization issued before it.¶
Two limits remain. Until the disablement is delivered, authorization issued before it stays usable, within the delays of Section 7.1. And a grant issued before the disablement and first redeemed after the reactivation has no derived authorization for the disablement to invalidate: grant-derived revocation (Appendix A.4) can reach such an ID-JAG, and nothing in this profile reaches such a WAG. Grant validation, replay prevention, and expiration still apply. Sessions actually revoked by the RAS remain revoked.¶
Deployments requiring rejection of such grants need grant-derived revocation, retained revocation history, an authoritative authorization check, or a separately specified authorization-generation mechanism.¶
A disabled principal may still have tokens accepted by an offline API. Token expiry and cached responses MUST be included in operational claims; stopping issuance alone does not terminate ongoing work or retract operations already performed.¶
The qualified identity permits correlation across users and resources. Provisioning and event access SHOULD be limited to the receiving domains that need it. Logs SHOULD retain administrative actions and affected identities without copying reusable grants, access tokens, or credentials.¶
This document requests no IANA actions.¶
This appendix profiles existing SCIM Events [RFC9967] and CAEP session-revocation events [CAEP] over Shared Signals [SSF]. It is normative for deployments that enable either capability and defines no new event type or subject format. SCIM event reconciliation and CAEP revocation are independently optional capabilities. A deployment MAY use either or both; it MUST apply the requirements for each enabled capability. Direct SCIM provisioning with CAEP revocation does not require SCIM event subscription or source-resource retrieval.¶
Trusted stream configuration MUST establish:¶
The Transmitter, receiving Target Tenant, and audience.¶
For SCIM event reconciliation, the source SCIM service, retrieval authority, and source-resource correlation under Section 6.¶
For grant-derived revocation, the governing ID-JAG issuer, and its tenant at a multi-tenant issuer, whose grants the Transmitter may revoke, and agreement to apply Appendix A.4.¶
For coarse user-and-tenant revocation, the authorized user namespace and revocation scope defined in Appendix A.4.¶
The SET issuer can differ from the IdP issuer. Their trust relationship comes from configuration; a subject identifier or matching host name cannot establish it.¶
The authenticated delivery context selects the stream. SET issuer and
audience validation, including audience arrays, follows [SSF] and
[RFC8417]. SSF uses secevent+jwt and does not use SET exp.
Push delivery follows [RFC8935]; poll delivery follows [RFC8936].
The selected transport defines acknowledgment, duplicate handling, and
errors. Neither transport is mandatory here. Acceptance acknowledges
delivery, not completed reconciliation or API enforcement.¶
Receivers MUST accept every provisioning and feed event defined in
Sections 2.3 and 2.4 of [RFC9967] as a reconciliation trigger when
subscribed to that event type. SCIM event capability is exposed through
securityEvents.eventUris in /ServiceProviderConfig under
Section 4 of [RFC9967]. SSF stream configuration uses
events_supported, events_requested, and events_delivered to
establish event delivery. These lists do not authorize a provisioning action
or establishes the grant-revocation composition. This profile adds no
discovery field. The table uses suffixes under
urn:ietf:params:scim:event:.¶
| Event suffix | Reconciliation behavior |
|---|---|
prov:create:notice, prov:patch:notice, prov:put:notice
|
Retrieve current authoritative state |
prov:create:full, prov:patch:full, prov:put:full
|
Retrieve current state; the included snapshot does not override it |
prov:activate, prov:deactivate, prov:delete
|
Reconcile current state or authoritative absence |
feed:add, feed:remove
|
Reconcile the resource and feed coverage; removal from a feed does not establish deletion or disablement |
Transmitters MUST report administrative changes for resources covered by
an agreed stream using an appropriate subscribed event. Event payloads
retain their base meanings. The top-level sub_id uses the RFC 9967
scim format and resource uri. When present, version is the source
ETag, not an ordered counter or the Receiver's ETag.¶
After validating the event and authority for its subject, the Receiver MUST:¶
Resolve the source service and resource URI to an authorized correlation or provisioning workflow in the configured Target Tenant.¶
Retrieve current source state and reconcile under Section 6. Source URI resolution MUST remain within the configured service; it cannot redirect retrieval credentials to a caller-selected endpoint.¶
Retain failed reconciliation as pending and retry or resolve it administratively. Acknowledgment MUST NOT discard pending work.¶
An authenticated prov:deactivate or prov:delete MAY cause a
provisional Local Suspension pending reconciliation. An activation event
MUST NOT activate the principal directly. This asymmetry is deliberate:
provisional denial can contain risk; granting access requires current
authoritative state and local authorization. Successful reconciliation
can clear that provisional restriction under local policy, but not an
independent Local Suspension. Feed removal and inaccessible sources
follow the incomplete reconciliation rules; they are not deletion
instructions.¶
A Receiver that accepts [WISE] lifecycle events about a provisioned
principal from a configured Transmitter applies the same asymmetry.
workload-disabled and workload-purged MAY cause a provisional Local
Suspension pending reconciliation. workload-enabled and
workload-restored trigger retrieval of current state and MUST NOT
activate the principal directly.¶
A platform hosting registered agents (Section 9) MAY transmit events about them to the IdP. Trusted stream configuration MUST establish the platform as Transmitter for the agents its connector registered, and the IdP MUST reject an event about any other agent.¶
Subject: The aliases format of Section 3.2.8 of [RFC9493],
containing the iss_sub identifier (the IdP issuer and the registered
Agent Principal identifier) and the uri workload identifier that
[WISE] uses, which the platform registered as the Agent's
externalId. The IdP MUST correlate both identifiers with the same
registered Agent, or reject the event.¶
Credential events: [WISE] credential-issued,
credential-rotated, credential-revoked, and
credential-compromised for the agent's workload credentials.¶
Posture events: [WISE] workload-compromised,
anomalous-behavior-detected, workload-degraded,
workload-restored, workload-baseline-changed, posture evaluation
results, and workload-vulnerability-status-changed.¶
Sessions: CAEP session-revoked when the platform revokes the
agent's sessions ([CAEP]).¶
Effect: An event informs IdP policy and monitoring. It does not change the Agent's administrative state, which changes only through [AGENT-MANAGEMENT].¶
A platform's own workload-disabled, workload-enabled, or
workload-purged reports its local control of the agent. It does not
change the IdP's active.¶
The IdP MAY send CAEP risk-level-change for a registered agent to the
platform over a stream in the other direction. CAEP defines no
principal value for an agent, so stream configuration MUST establish
the value used. The platform applies the event under its own policy; a
risk event is not an administrative disablement.¶
The optional capability uses CAEP's existing event type
https://schemas.openid.net/secevent/caep/event-type/session-revoked.
CAEP permits session properties to identify affected sessions; here the
property is the ID-JAG that established their authorization. This
composition additionally requires denial before redemption and rejection
of later redemption. Ordinary CAEP support or advertisement of the
event URI alone does not establish these receiver semantics.¶
The Transmitter MUST use the jwt_id subject format from
Section 3.5.1 of [SSF], with iss and jti equal to the issued
ID-JAG's corresponding claims. It MUST name a grant it is authorized
to revoke. The SET's own jti identifies the event, not the grant.¶
The Receiver MUST verify that the subject's iss matches the
governing ID-JAG issuer authorized in the stream configuration. That
configuration supplies the Target Tenant. At a multi-tenant issuer,
the Receiver MUST apply the revocation, including a denial retained
before redemption, only to a grant whose tenant is the tenant that
configuration authorizes. The revocation key is
(ID-JAG issuer, ID-JAG jti, Target Tenant); it MUST NOT be matched as
a bare RAS session identifier or used outside that tenant.¶
On redemption, a participating RAS MUST retain that key with every derived authorization session, access token, and refresh authorization. The Receiver MUST invalidate all authorization derived from that grant in the tenant, including all redemptions, and reject later redemption of the revoked grant.¶
A valid event received before redemption MUST retain a denial for that grant. The Receiver retains it until neither the grant nor derived authorization can be accepted. For an unknown grant, this requires a configured maximum grant acceptance window, including clock leeway; receipt before redemption MUST NOT be treated as a no-op.¶
This identifies the same grant at both parties without registration of a RAS-generated session ID. Parties MUST NOT enable this composition unless the RAS retains the required correlation and enforces the grant denial. Existing sessions need trustworthy backfilled correlation or remain outside its coverage.¶
A deployment MAY additionally configure CAEP's complex subject with
user in iss_sub format and tenant in opaque format under
[RFC9493] to revoke existing sessions for that user and tenant. The
parties MUST agree on
the user namespace and map it authoritatively to the RAS user, and the
tenant MUST match the stream's Target Tenant. All supplied subject
conditions MUST match; an unmappable component MUST NOT broaden the
revocation. This coarse mode is distinct from grant-derived revocation
and does not revoke future grants or unrelated users' sessions.¶
Neither mode changes Agent active. Revoked authorization remains
revoked after activation. CAEP event_timestamp, initiating_entity,
and localized reasons retain their meanings; event time is not a cutoff
against grant iat. No new claims are introduced.¶
| Action | Affected authorization | Principal state |
|---|---|---|
| Apply Agent disablement or deletion | Every RAS session for the qualified agent in the Target Tenant | Inactive or absent |
Revoke an ID-JAG by issuer-qualified jti
|
All authorization derived from that grant, plus later redemption of it | Unchanged |
| Configured CAEP user-and-tenant revocation | Existing sessions matching that user and tenant | Unchanged |
None establishes a shorter API enforcement delay than Section 7.1.¶
This non-normative walkthrough uses the dedicated-client exchange in [FEDERATION]. It is a specification walkthrough, not an executed implementation test.¶
The authenticated provisioning context binds https://idp.example/ to
Target Tenant acme-data. The RAS resource is
https://api.example/tenants/acme-data/. The connector creates this
Agent:¶
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Agent"],
"externalId": "agent-42",
"agentUserName": "analysis-agent",
"displayName": "Data analysis agent",
"active": false
}
¶
The RAS assigns SCIM id local-108 to the management representation
of local principal service-principal-42 and correlates the context's
(https://idp.example/, agent-42) with that principal. The SCIM id
is not the principal identifier.
Alice is separately represented as user-108; the client is
analysis-api. Neither is the agent's correlation identifier.¶
The connector reads the resource and receives ETag W/"a1". At 12:01
UTC on September 17, 2026, it applies:¶
PATCH /scim/v2/Agents/local-108 HTTP/1.1
Host: ras.example
Authorization: Bearer CONNECTOR_ACCESS_TOKEN
Content-Type: application/scim+json
If-Match: W/"a1"
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{"op": "replace", "path": "active", "value": true}]
}
¶
The placeholder connector token is not a test credential. The Receiver
returns a new ETag. At 12:01:03, the IdP issues ID-JAG grant-1 for
Alice with act.iss https://idp.example/ and act.sub agent-42. No
lifecycle timestamp is added to the grant or compared with its iat.¶
At redemption, the RAS correlates that pair in acme-data, checks local
eligibility and Federation policy, and issues an access token. This
example uses introspection. A policy-permitted refresh retains the same
user, agent, client, tenant, resource, and authority constraints.¶
At 12:02, an authorized connector sets active: false using the current
ETag. Before returning success, the Receiver blocks new RAS
authorization and makes existing sessions unusable at the RAS.
Subsequent introspection reports those tokens inactive. An API using a
previously cached response can continue to accept it only within its
configured cache policy.¶
Alternatively, a SCIM change notice can trigger an authoritative GET and the same local update. Appendix C shows that notice and a CAEP revocation targeting one ID-JAG; revocation need not disable the principal.¶
At 12:03, reactivation permits new authorization decisions. It does not restore the sessions revoked at 12:02. Had the Receiver been unreachable from 12:02 to 12:03, the connector would still have delivered the disablement before the activation (Section 3.1), with the same effect. An old unredeemed grant is subject to normal grant validation, not a new lifecycle cutoff.¶
| Case | Expected result |
|---|---|
Equal externalId under a different IdP context |
Distinct qualified identity; no automatic correlation |
| Create for a pair the RAS correlated just in time | Adopted: one principal, keeping its local restrictions and revocation state |
Two Agents sharing an agentUserName from different IdP-side Provisioning Domains |
Both provisioned; the connector assigns one a destination-unique name; each correlates by its own externalId
|
Stale If-Match
|
HTTP 412; retrieve and reconcile before retrying |
| Descriptive edit | Resource ETag may change; no implicit authorization change |
| Applied disablement | New redemption and refresh denied; existing RAS sessions revoked |
| Reactivation after applied disablement | New decisions allowed; revoked sessions stay revoked |
| Delayed activation notice | Retrieve current source state; do not apply the notice as an activation command |
| Disable and re-enable while the Receiver is unreachable | The disablement is delivered, then the activation; sessions from before stay revoked |
| Disable, re-enable, and disable while the Receiver is unreachable | One disablement is delivered, and no activation |
| Disablement write retried after a lost success response, once reconciliation has found the principal active | The retry invalidates authorization issued in between; new decisions follow the IdP's next delivery |
| Grant issued before a disablement, first redeemed after reactivation | Not invalidated by the disablement; grant-derived revocation can reach an ID-JAG |
| Grant revocation arrives before redemption | Retain the denial; reject later redemption |
| Grant subject issuer differs from the stream's authorized issuer | Reject; no cross-issuer revocation |
| Direct SCIM provisioning with CAEP revocation only | No SCIM event subscription or source GET required |
Reactivation without a version ETag, including If-Match: *
|
HTTP 409; retrieve and use the current ETag |
| Feed removal event | Reconcile coverage; do not infer deletion |
| Source unavailable | No activation inferred; local stale-state policy applies |
| SCIM success or SET acknowledgment | Does not establish immediate API denial |
| Offline JWT | May remain usable until expiration unless separately restricted |
These decoded SETs omit signatures. Their protected type is
secevent+jwt. Trusted configuration binds the stream to governing
issuer https://idp.example/ and Target Tenant acme-data; the
Transmitter issuer is separately authorized for that namespace.¶
The trusted source SCIM service has resource /Agents/source-42. Its
configured correlation is (https://idp.example/, agent-42),
represented at the RAS by /Agents/local-108. At 12:02 UTC on September
17, 2026, the source changes the principal's active value to false:¶
{
"iss": "https://signals.idp.example",
"aud": ["https://ras.example/signals/acme-data"],
"iat": 1789646520,
"jti": "change-42",
"sub_id": {
"format": "scim",
"uri": "/Agents/source-42"
},
"events": {
"urn:ietf:params:scim:event:prov:patch:notice": {
"version": "W/\"source-b7\"",
"attributes": ["active"]
}
}
}
¶
The Receiver retrieves the source Agent, observes active: false, and
applies disablement under Section 5.2. The notice itself contains no
boolean state, authorization cutoff, or lease. If delivered after a
later change, retrieval obtains current state instead.¶
This non-normative example follows one first-party agent on a data platform through signals, a risk change, disablement, and re-enablement under Section 9. The platform's connector registered the agent with the IdP under [AGENT-MANAGEMENT], which returned the Agent Principal identifier, and streams in both directions are configured as Appendix A.3 describes. This deployment sets no revalidation bound (Section 6), so the platform keeps authorizing on locally applied state while the IdP is unreachable. [GUIDE] shows that setup, and the agent's later federation and retirement. Signatures, credentials, and tokens are omitted or shown as placeholders.¶
| Party | Identifier |
|---|---|
| Enterprise IdP |
https://idp.example/, SCIM base https://idp.example/scim/acme
|
| Data platform |
https://dataplatform.example/
|
Platform's workload identifier for the agent (agt-31) |
wimse://dataplatform.example/agents/agt-31
|
| IdP SCIM resource for the agent |
/Agents/a58
|
| Agent Principal | (https://idp.example/, agent-58) |
At 14:20 UTC on September 17, 2026, the platform rotates the agent's Workload Identity Certificate and reports it to the IdP in a SET with these claims:¶
{
"iss": "https://dataplatform.example/",
"aud": ["https://idp.example/signals"],
"iat": 1789654800,
"jti": "pl-cred-31-7",
"sub_id": {
"format": "aliases",
"identifiers": [
{
"format": "iss_sub",
"iss": "https://idp.example/",
"sub": "agent-58"
},
{
"format": "uri",
"uri": "wimse://dataplatform.example/agents/agt-31"
}
]
}
}
¶
Its events claim has one member, whose value is below. The member's
key is the WISE event type URI, the base
https://schemas.openid.net/secevent/wise/event-type/ followed by
credential-rotated:¶
{
"credential_type": "wic",
"previous_credential_id": "serial:31-0006",
"new_credential_id": "serial:31-0007",
"event_timestamp": 1789654800,
"initiating_entity": "system"
}
¶
The IdP accepts the event because this stream's Transmitter registered
agent-58 and both identifiers name that Agent. The event updates the
IdP's view of the agent; it does not change active.¶
At 14:25, the platform observes the agent reading tables outside its
usual pattern and sends WISE anomalous-behavior-detected with
severity high and the same subject. The event is advisory.¶
At 14:30, the IdP's risk analysis, combining the platform's report with
other signals, rates the agent HIGH. It sends CAEP risk-level-change
with principal AGENT and current_level HIGH to the platform.
Platform policy restricts the agent to read-only operations. The agent
remains active; a risk event is not a disablement.¶
At 14:31, an IdP administrator disables agent-58. The IdP sends the
platform a SCIM change notice for /Agents/a58, as in
Appendix C. The platform retrieves /Agents/a58 from the IdP,
observes active: false, and under Section 9:¶
denies new authorization for agt-31;¶
revokes the agent's existing sessions and tokens in its own authorization; and¶
reports session-revoked for agent-58 to the IdP, so the IdP sees
that the platform applied the change.¶
If the notice is lost or the IdP is unreachable, the platform keeps its last applied state, here active and read-only, until its periodic reconciliation retrieves the Agent. An unreachable IdP neither disables nor re-enables the agent.¶
At 15:00, the IdP administrator re-enables the Agent, and the platform
retrieves and applies active: true. The agent can obtain new
authorization. The sessions revoked at 14:31 stay revoked, and the
read-only restriction from the risk event remains until platform policy
lifts it.¶
If the platform had suspended the agent itself, re-enablement at the IdP would not clear that Local Suspension.¶
RFC Editor: Remove this section before publication.¶
Initial version.¶
TBD.¶