Agentic Authentication & Authorization - Part 7: Operating in Production

Nov 14, 2026 min read

Parts 1 to 6 built the controls. This part is about keeping them working once agents are live: recording what happened in a way you can trust, changing policy without breaking everything, noticing when a signal stops arriving, and pulling one agent out without taking its user down with it.

What changes once agents are live

Three properties of agents make operations harder than for human sessions:

  • They run unattended and for a long time. A human notices when something looks wrong; a background agent keeps going. draft-ietf-wimse-aims asks that long-lived sessions be terminated or downscoped on revocation or risk signals, not left to run to completion.
  • Their actions fan out. One user request can produce dozens of tool calls across several servers and domains (Part 3). Without correlation, an incident becomes guesswork.
  • Their failures are quiet. A stalled signal stream or a stale cache doesn’t throw errors. It just lets decisions be made on old facts.

Decision logs that keep user and agent apart

The audit log is where the series’ through-line (who decided, who consented, who executed) either holds or falls apart. draft-ietf-wimse-aims requires durable, tamper-evident audit logs and lists the minimum fields. The table adds the fields from earlier parts that make those minimums useful.

FieldRequired by draft-ietf-wimse-aimsWhere it comes from
Agent identifierYesToken client_id (Part 2)
Delegated subjectYesToken sub
Resource, action and decisionYesThe AuthZEN request and response (Part 5)
Timestamp and correlation IDYesX-Request-ID echoed by the PDP; Transaction Token txn (Part 3)
Posture or risk stateYesSignals the PDP holds when it decides
Remediation eventsYesRevocations and downscoping triggered by signals
Actor chainRecommendedThe act claim, including nested prior actors (RFC 8693)
Policy and mapping versionRecommendedYour policy repository; the tool’s x-authzen-mapping
Approval evidenceRecommendedapproval from the Access Request and Approval Profile; CIBA auth_req_id (Part 6)

Two details matter. First, RFC 8693 says prior actors are informational only for access control. That is exactly why they belong in the log: the decision ignores them, the investigation needs them. Second, the same draft says operators should be able to reconstruct the full execution chain, including delegated authority and intermediate calls. Test that you can, with a real request, before you need to.

Policy lifecycle

No standard covers how you manage policy, and draft-ietf-wimse-aims leaves policy formats to deployments. What the earlier parts do fix is what can go wrong, which gives four practices.

  • Treat policy and mappings as code. Policies live in version control with review. So do tool mappings: COAZ-MCP evaluates only what a mapping projects, so a mapping change that drops an argument silently removes a check (Part 5).
  • Test against real requests. Keep a set of recorded evaluation requests with known-good decisions and run every policy change against them. AuthZEN’s request format is fixed, which makes such a suite portable across PDPs.
  • Run new policy in shadow first. Evaluate the candidate policy alongside the live one on production traffic and compare decisions before enforcing it.
  • Make rollback faster than rollout. A bad rule in a central PDP affects every tool behind every PEP at once.

One more source of change is easy to miss. Client ID Metadata Documents are hosted by the client and can change at any time. The OAuth draft lets the authorization server re-evaluate consent or revoke tokens when keys or key-related metadata change. Watch for it rather than finding out from a support ticket.

Signal streams: SSF, CAEP and RISC

Tokens and cached decisions are snapshots. The OpenID Shared Signals Framework (SSF 1.0, Final) is how the snapshot learns it is out of date. draft-ietf-wimse-aims states the consequence plainly: after a revocation or risk notice, cached authorization decisions and tokens that are no longer valid must not continue to be used.

How events travel. Each event is a Security Event Token (RFC 8417), a JWT typed secevent+jwt with the subject in sub_id and the event under events. Delivery is push (RFC 8935, the transmitter POSTs to the receiver) or poll (RFC 8936, the receiver fetches). Subjects use RFC 9493 identifier formats such as email, iss_sub or opaque, or a complex subject combining user, device, session, tenant and group. Receivers manage streams through a configuration endpoint, and add or remove subjects per stream.

Which events matter for agents. CAEP 1.0 defines eight event types; RISC 1.0 adds account-level ones.

EventProfileWhat it meansWhat to do with agents
session-revokedCAEPA session for the subject has endedStop every agent acting under that session; deny in the PDP
credential-changeCAEPA credential was created, changed, revoked or deletedRe-check tokens derived from it
token-claims-changeCAEPA claim in the subject’s tokens changedRefresh cached attributes in the PDP
assurance-level-changeCAEPAuthentication strength went up or downRequire step-up for sensitive tools (Part 6)
device-compliance-changeCAEPA device became compliant or non-compliantRe-evaluate agents running on that device
risk-level-changeCAEPAssessed risk moved to LOW, MEDIUM or HIGHDownscope, or require approval
session-established, session-presentedCAEPA session started, or was seen activeCorrelate in logs
account-disabled, account-purgedRISCThe account was disabled or deletedRevoke every grant the user gave to agents
credential-compromiseRISCAn identifier was found compromisedTreat as an incident (below)

RISC’s own sessions-revoked is deprecated; new implementations must use CAEP’s session-revoked.

Knowing the stream is alive. A stream that stops delivering looks exactly like a quiet day. SSF has the tools to tell the difference. A receiver can read a stream’s status (enabled, paused or disabled) from the status endpoint, and can ask the transmitter for a verification event by posting its stream_id to the verification endpoint. Transmitters may also send verification events unprompted. Request one on a schedule and alert when it does not arrive. That turns a silent failure into a page.

Agent lifecycle

An agent is a piece of software with a lifecycle of its own, separate from the users it serves. Part 2 gave it an identity; operations has to manage that identity from registration to retirement.

Revoking one agent should not mean revoking its userRegisterown client_id ormetadata documentIssue credentialsshort-lived,bound to a keyOperateeach decision loggedwith the actor chainRotate keysnew keys,same client_idon a schedulewhen something goes wrongRevoke one agentDisable its client at the ASRevoke its tokens (RFC 7009)The user and other agents keep workingRevoke the userCAEP session-revoked to receiversEvery agent acting for the user stopsPDP denies; caches invalidated
Revoking one agent should not meanrevoking its userRegisterown client_id ormetadata documentIssue credentialsshort-lived,bound to a keyOperateeach decision loggedwith the actor chainRotate keysnew keys,same client_idon a schedulewhen something goes wrongRevoke one agentDisable its client at the ASRevoke its tokens (RFC 7009)The user and other agents keep workingRevoke the userCAEP session-revoked to receiversEvery agent acting for the user stopsPDP denies; caches invalidated

The highlighted path is the one most deployments cannot take today. If the agent runs on the user’s own token, the only way to stop it is to stop the user. With its own client_id, its own keys and tokens that name both parties, you can pull one agent and leave everything else running.

Three practices keep the lifecycle manageable:

  • Keep an inventory. Every agent, its client_id or metadata document URL, its owner, and the tools it may call. draft-ietf-wimse-aims leaves registries to each deployment, so this one is yours to build.
  • Rotate without re-registering. Keys published through jwks_uri can change while the client_id stays the same. Expect authorization servers following the Client ID Metadata Document draft to re-check consent when keys change.
  • Deprovision through signals. draft-ietf-wimse-aims asks credential issuers to announce status changes over SSF, so credentials derived from a revoked one are revoked too.

Incident response: containment paths

The right lever depends on what was compromised. The aim is the smallest blast radius that actually contains it.

What was compromisedContain withStandards
One agent’s key or credentialDisable the client at the authorization server, rotate its keys, revoke its tokens, and add a PDP deny on its client_idRFC 7009; AuthZEN policy
One user’s accountRevoke the user’s sessions and emit session-revoked so every receiver acts; disable the accountCAEP; RISC account-disabled
One MCP server or toolRemove it from the gateway, and deny its resource in the PDP; revoke tokens issued for its audienceCOAZ-MCP; RFC 8707 audiences
A pattern across agents, such as prompt injection through a shared data sourceDeny the affected action or resource in the PDP for every agent, then narrow it downAuthZEN policy

Two mechanics decide how fast containment actually happens.

  • Revocation reaches what it can see. Revoking a refresh token through the RFC 7009 endpoint should also invalidate access tokens from the same grant. But a self-contained JWT stays valid until it expires for any resource server that reads it directly. RFC 7662 token introspection closes that gap by asking the authorization server for the current state, at the cost of a call. Keep tokens short-lived, and introspect on high-risk tools.
  • The PDP is the fastest switch. One deny rule applies to every call behind every PEP on the next evaluation, provided no cache keeps serving old decisions.

After containment, the decision log becomes the record of what happened: every decision for that agent or user, which approvals it relied on, and which actor chain each call came through.

Operational checklist

The series condensed into what has to be true in production. The priority column is my own judgment, not a standard’s.

AreaRequirementPriorityPart
IdentityEvery agent has its own client_id; no shared secretsMust2
IdentityAgent credentials issued at runtime, short-lived, kept away from the modelMust2
TokensEvery token audience-bound; no token passthroughMust4
TokensTokens sender-constrained (DPoP or mTLS)Should2
DelegationDownstream hops use token exchange with act, not forwarded tokensMust3
AuthorizationHigh-risk tools checked per call by a PDP, failing closedMust5
AuthorizationMappings project every argument a rule depends onMust5
Human in the loopApprovals happen on a channel the agent does not controlMust6
LoggingAudit log has the draft-ietf-wimse-aims minimum fields, plus the actor chainMust7
LoggingA full execution chain can be reconstructed from the logsShould7
PolicyPolicies and mappings in version control, tested, with fast rollbackMust7
SignalsSSF streams monitored with scheduled verification eventsShould7
SignalsCaches invalidated on revocation and risk eventsMust7
ResponseOne agent can be revoked without revoking its userMust7

Sources