Giving an AI agent an API key does not make it accountable. That is the gap this article addresses. Agentic AI systems call tools, chain requests across services, and sometimes act long after the person who started the workflow has moved on to something else.
A single OAuth token or service account can authenticate that activity without answering the questions that actually matter to a security team: which agent instance did this, who or what authorized it, does the action still match the original intent, and can someone shut it off in the next five minutes.
This blueprint separates human, application, workload, agent, tool, and resource context as distinct control concerns. A deployment may represent some of these concerns with the same underlying platform primitive, but it should preserve their differences in policy and audit records whenever they affect authorization or accountability.
This is an IAM blueprint for closing that gap, showing how delegated, bounded, and autonomous authority move through those concerns.
It explains why OAuth 2.0 and its token-exchange extension (RFC 8693) are necessary but insufficient on their own, how Model Context Protocol and Agent2Agent security models fit into the picture, and where authorization has to be checked one more time, at the resource itself, no matter what happened upstream. It closes with a control-plane blueprint, a 30/60/90-day rollout sequence, and the anti-patterns that quietly undermine all of it.
Every technical claim below is labeled by evidence type: documented behavior (verified against current primary sources), primary-source standard (a specification or RFC), vendor claim, practitioner observation (drawn from security-community discussion), or editorial recommendation (a judgment call this article is making explicitly, not a settled standard). Where the underlying protocols are still moving, and MCP and A2A both are, as of August 2026, the article says so and gives the version in force.
Key Takeaways
Click any topic to expand or collapseAI Agent Identity & Delegated Context
An AI agent is not simply a user and not simply a standard service account. It requires a dedicated workload identity paired with explicit delegated context whenever it acts on behalf of a human or system.
OAuth 2.0 & Token Exchange Delegation Scope
OAuth 2.0 and token exchange protocols are delegation delivery mechanisms, not decision engines. They verify that a client was authorized to obtain a token, but do not evaluate whether a specific downstream action remains policy-compliant.
Boundary Authorization Enforcement
The identity that matters most is verified at the resource boundary: authorization must be re-evaluated at the API, database, or service level, independent of decisions made upstream in the request chain.
Authority Models & Custom Security Controls
Delegated, bounded, and autonomous authority demand tailored control models. Uniform security policies either over-constrain bounded pipeline agents or under-constrain autonomous remediation agents.
Shadow Agents & Standing Privilege Lifecycle Management
Lacking an inventory, designated ownership, and retirement workflows leads to shadow agents accumulating unmonitored standing privilege—a recurring operational risk in non-human identity (NHI) governance.
Download the Complete IAM Blueprint & Reference Architecture
Get the offline PDF edition with complete OPA Rego policies, token exchange schemas, and the 30/60/90-day rollout checklist.
Why Agentic AI Creates an Identity Problem
A conventional application has a short, predictable chain of custody. A user logs in, the application gets a token scoped to that user, and the application calls a fixed set of downstream services. An agentic system breaks that pattern in three ways.

First, the agent decides at runtime which tools to call and in what order, so the set of downstream calls is not fixed in advance.
Second, the agent frequently keeps working after the human who triggered it has stepped away, a scheduling assistant that books a follow-up meeting three days later, a remediation agent that keeps watching a cost anomaly overnight.
Third, agents call other agents and other tools, so a single user request can fan out into a chain of five or six identity hops before it reaches a database or a production system.
None of this is solved by authentication alone. A valid credential tells you the caller passed a challenge. It does not tell you whether the caller is the specific agent instance you think it is, whether the action it is about to take still matches the intent that was authorized upstream, or who is accountable if that action turns out to be wrong.
Security teams and IAM practitioners describe this as an accountability problem more than an authentication problem, the recurring question in community discussion is not "can the agent log in" but "can we trace this specific action back to a human decision" (r/cybersecurity discussion on agent identity; r/AI_Agents discussion on OAuth limitations).
This is a practitioner observation, not a measured industry statistic, but it is consistent with how the strongest published vendor and educational material frames the problem, including Microsoft's identity guidance for AI agents and the Cloud Security Alliance's governance research.
The practical consequence is that a workable IAM model for agentic AI has to answer five questions at every hop, not just at login: who initiated this, what identity is acting right now, what authority was delegated to it, what is it allowed to touch, and who can revoke it. The rest of this article builds toward a blueprint that answers all five.
What Is a Non-Human Identity?
A non-human identity (NHI) is any digital identity that authenticates and acts without a person directly present at the moment of the action. That covers a wide range of existing constructs, service accounts, API keys, workload identities, managed identities, bots, as well as the newer category this article focuses on: AI agent identities.

The term is broad by design, and that breadth is part of the current governance problem: teams that lump agents in with static service accounts tend to reuse controls that were built for predictable, low-frequency machine access and were never designed for something that makes autonomous, non-deterministic decisions about which tool to call next.
It helps to separate two properties that get conflated in casual usage:
- What authenticates the caller. This is the credential, an X.509 certificate, a JWT, an API key, a signed token. Authentication proves the caller holds a valid credential for a given identity.
- What the caller is allowed to do, and on whose authority. This is authorization plus delegation. It is a separate question from authentication, and it is the question most NHI incidents actually turn on.
An AI agent identity is a specialized case of NHI. It needs the workload-identity properties any machine identity needs, a verifiable, attestable, rotatable credential, plus something most service accounts never had to carry: an explicit record of delegated intent, because the agent is frequently acting for someone or something else, not simply as itself.
Why AI Agents Are Different From Traditional Service Accounts and Workloads
The counterargument matters here, and it is not a weak one: many experienced IAM practitioners argue that an AI agent is just an application, and that the field does not need a new identity category, it needs to apply existing service-account, workload-identity, and least-privilege discipline more rigorously.

This is a fair position, and this article does not dismiss it. Established controls such as Google Cloud's service account model, workload identity federation, RBAC, and audit logging remain the building blocks. The disagreement in the community is real and not yet settled by any binding standard, treat any claim that agents "need a fundamentally new identity system" as an editorial framing, not a resolved technical fact.
What is defensible, and what this article adopts as its working position, is a layered synthesis: authenticate the agent as a workload, and carry delegated subject and intent context explicitly whenever it acts for a human or another system. Three properties push in this direction:
- Non-deterministic tool selection. A traditional service account calls a known, small set of APIs in a known pattern. An agent decides at runtime which tools to invoke based on a model's output, so the permission surface it might touch is broader and less predictable than what a static service-account policy typically anticipates.
- Persistent action after the initiating human is gone. A user-triggered workflow that keeps running, polling, retrying, scheduling, after the user has closed the browser tab means the credential is exercising authority without a human actively present to notice something has gone wrong.
- Multi-hop, cross-boundary chains. An agent that calls another agent, which calls a third-party tool, which reaches a SaaS API, creates several successive identity hops. Each hop is an opportunity for the original intent and scope to get lost or silently widened, sometimes described in practitioner terms as authorization "outliving" the intent that justified it.
None of these properties require throwing away service-account and workload-identity primitives. They require adding delegation and intent context on top of them, and checking authorization again closer to the resource, which is the subject of the sections that follow.
The Identity Model: Human, Application, Workload, Agent, Tool, and Resource
A usable blueprint needs distinct, non-overlapping identity types. Collapsing any two of these into one (a common failure pattern) is what produces the accountability gaps described above.
| Identity Type | Authority Source | Typical Lifetime | Best Use Case | Main Risk | Recommended Controls | Audit Requirement |
|---|---|---|---|---|---|---|
| Human identity | Person, verified by IdP | Session-based | Initiating requests, approvals | Phishing, credential theft | MFA, step-up auth, SSO | Login and consent events |
| Service account | Administrator-provisioned | Long-lived by default | Fixed, predictable batch jobs | Standing keys, shared credentials | Key rotation, scoped roles | Key issuance and usage logs |
| Application identity | Registered client (OAuth) | Per-token, refreshable | Third-party integrations | Over-broad consent scopes | Scope minimization, consent review | Token issuance and scope grants |
| Workload identity | Platform attestation (runtime, cluster, CI) | Minutes to hours | Cloud-native services, CI/CD | Misconfigured trust policy | Federation, no static keys | Token exchange events |
| Managed identity | Cloud platform-assigned | Bound to resource lifecycle | Credential-less cloud resource access | Broad resource-level grants | Least-privilege role assignment | Resource access logs |
| Delegated agent identity | Workload identity + explicit human/subject context | Session or task-bound | Assistant acting for a named user | Impersonation, lost attribution | Token exchange, subject claim binding | Human + agent + action correlation |
| Bounded agent identity | System/pipeline definition | Pipeline-run scoped | CI/CD or platform agents within a defined boundary | Scope creep across pipelines | Environment-scoped policy, per-run credentials | Run ID + resource + outcome |
| Autonomous agent identity | Its own registered identity and risk profile | Standing, but policy-gated per action | Cloud remediation, cost optimization | Unsupervised high-impact actions | Point-of-use policy, approval thresholds | Full action + justification trail |
Reading this table left to right, the identity type does not by itself determine safety, the combination of authority source, lifetime, and audit requirement does. A workload identity with no delegation context is fine for a bounded pipeline agent and dangerous for an assistant acting on a specific person's calendar. This is the decision the next section formalizes.
Delegated Authority, Bounded Authority, and Autonomous Authority
Three authority models cover almost every production agent, and confusing them is one of the more consequential design mistakes teams make.
Delegated authority means that an agent acts on behalf of a named human or upstream system under an explicitly approved scope. The delegated scope should be no broader than the authority granted for the task and should be constrained by the authorization server, resource server, and local policy.
OAuth token exchange can preserve subject and actor context, but it does not automatically make the agent's permissions identical to the delegator's direct permissions.
Bounded authority means the agent operates inside a fixed, pre-approved system boundary, a CI/CD pipeline, a data-processing job with a defined input and output, and does not claim to represent any specific person. Its authority comes from the system definition, not from a delegator, and it should be scoped tightly to that boundary regardless of who triggered the run.
Autonomous authority means the agent has its own standing mandate to act, evaluated continuously against policy rather than against a single person's permissions. This is the highest-risk category because there is no single human to point back to for each individual action, so the burden shifts entirely to registration, risk classification, and point-of-use enforcement.
| Authority Model | Who Decides Scope | Revocation Trigger | Primary Enforcement Point |
|---|---|---|---|
| Delegated | The delegating human or system | Consent or grant withdrawal, identity disablement, policy change, or an explicit session boundary where the implementation binds the grant to that boundary | Token issuance and exchange |
| Bounded | The system/pipeline owner | Run completion, run cancellation, pipeline disablement, credential expiry, or policy change, subject to the platform's token and job semantics | Per-run credential issuance |
| Autonomous | Policy engine plus registered risk profile | Policy violation, anomaly response, operator disablement, credential revocation, or a kill-switch action, with separate handling for already-issued tokens and in-flight requests | Point-of-use / last-hop check |
Example 1 — Delegated: a scheduling assistant
A workplace assistant reschedules a meeting after a user asks it to. The agent should use a delegated agent identity carrying the user's subject claim, obtained through a token-exchange flow rather than by silently reusing the user's own session token.

It needs calendar read/write scoped to that one user's calendar and nothing else, not organization-wide calendar access. It must not be allowed to send messages to people outside the meeting, change meeting attendee lists without confirmation, or act on a different user's calendar even if it can technically reach the API. Every write should log the human subject, the agent instance ID, the specific calendar object touched, and the token's audience and scope.
Revocation should have a single, well-tested control path: revoke the delegated grant or disable the agent identity, stop new token issuance where the identity provider supports it, and block subsequent calls at the resource boundary. Do not assume that ending a user session immediately invalidates cached or downstream tokens; verify that behavior for the deployed token-validation architecture.
Example 2 — Bounded: a CI/CD deployment agent
A platform agent watches a repository and deploys approved changes to a staging environment. It should run under a bounded agent identity tied to the pipeline definition, not to whichever engineer triggered the run, using a short-lived workload credential obtained through federation rather than a stored deployment key.

It needs write access to the staging environment's deployment target and read access to the specific repository, and nothing in production. It must not be allowed to modify its own pipeline definition, promote to production without a separate approval gate, or use credentials outside the pipeline's declared environment.
Logs should tie each deployment to a commit hash, pipeline run ID, and the environment touched. The preferred design is to issue a credential scoped to the run and environment, then expire or revoke it when the run ends or is cancelled. Whether a pipeline disablement immediately removes access depends on the CI/CD platform, identity provider, token cache, and downstream resource; test those paths rather than treating job completion as proof of revocation.
Example 3 — Autonomous: a cloud cost-remediation agent
An agent monitors cloud spend and independently resizes or terminates underutilized resources overnight, when no engineer is watching. It should carry its own registered autonomous agent identity with an explicit risk profile, because there is no single human decision behind each individual action.

It needs read access to billing and utilization metrics and write access limited to a pre-approved action set (stop, resize) on a pre-approved resource tag or project, never delete, and never anything outside tagged non-production resources without a human approval step. It must not be allowed to touch resources outside its declared scope, take irreversible actions (deletion, data loss) without escalation, or continue acting if its policy engine becomes unreachable, a fail-closed default matters here.
Every action needs a full justification trail: the metric that triggered it, the policy rule evaluated, and the resource state before and after. Revocation must be fast and total: a single kill switch that invalidates the agent's credential and halts in-flight actions, because by definition no human is standing by to notice a problem in real time.
Why OAuth Does Not Replace Runtime Authorization
OAuth 2.0 (RFC 6749) is a delegation framework: it lets a client obtain limited access to a resource on a resource owner's behalf, or on its own behalf, through a defined authorization flow. That is a precise, well-understood, and genuinely useful piece of infrastructure, this article is not arguing that OAuth is broken.

What it is not designed to do is evaluate whether a specific downstream action, taken minutes or hours after the token was issued, still matches what the resource owner intended at authorization time. That gap is not a flaw in OAuth; it is outside the protocol's scope by design.
OAuth 2.0 Token Exchange (RFC 8693) closes part of the gap for multi-hop scenarios. It defines a security-token-service pattern in which a client presents a subject token and, optionally, an actor token, and receives a new token, narrower in scope, aimed at a different audience, or reflecting a different acting party.
This is the primary-source mechanism for expressing "agent X is acting for user Y" in a way a downstream service can verify, rather than the agent simply reusing the user's original token wholesale (a pattern sometimes called lazy impersonation, which collapses the agent's own identity into the user's and makes fine-grained attribution difficult afterward).
RFC 8693 defines token-exchange semantics for delegation and impersonation and registers the act claim for representing an actor. It does not require every authorization server to emit the exact JWT shape shown below, nor does it require every access token to contain all of these claims. The following object is illustrative: claim names, nesting, audience format, issuer behavior, and token lifetime are deployment- and issuer-specific.
{ "iss": "https://idp.example.com", "sub": "user:jordan.reyes@example.com", "act": { "sub": "agent:scheduling-assistant-v2#instance-8f3a" }, "aud": "https://api.example.com/calendar", "scope": "calendar.events.write", "client_id": "scheduling-assistant-v2", "iat": 1735570000, "exp": 1735570300 }Illustrative token, not a live credential. sub is the delegating human; act.sub is the specific agent instance acting on their behalf; aud is scoped to one API, not a blanket grant; exp gives the token a five-minute lifetime. For a multi-hop chain, RFC 8693 allows nesting a further act claim inside act to preserve each successive actor in the chain.
A resource server may be able to answer the accountability question directly when the issuer provides trusted subject and actor context, the resource server validates that context, and the token is intended for the resource. Otherwise, the resource server may need correlated events or a trusted authorization service to reconstruct the chain. The example therefore demonstrates a useful design pattern, not a universal OAuth contract.
But token exchange still only governs how a token is minted, not what happens after it is issued and cached. A token that is valid at 9:00 a.m. and still technically unexpired at 11:00 a.m. does not know that the user changed their mind, that the underlying request was cancelled, or that a security team just flagged the account for review.
This is the practical substance behind the "authorization can outlive intent" concern raised repeatedly in identity practitioner discussion (r/IdentityManagement thread on auth tooling and AI agents), it is a real design constraint of bearer tokens generally, not a claim that any specific OAuth implementation is defective.
The correct framing, and the one this article uses throughout, is layered: OAuth and token exchange handle how a client gets a token that represents a given delegation. They do not handle whether the specific action the agent is about to take, right now, is still appropriate, that is the job of runtime authorization and point-of-use policy, covered next.
Workload Identity, Short-Lived Credentials, and Dynamic Secrets
The most consequential shift available to teams running agentic workloads is eliminating standing, long-lived secrets in favor of workload identity federation. This is documented behavior, not an aspirational claim: Google Cloud's documentation states plainly that Workload Identity Federation is the recommended approach for external workloads because it relies on short-lived credentials rather than static service account keys, and comparable federation patterns exist across major providers.

The mechanism is consistent across implementations: a workload authenticates to its native identity system (a Kubernetes service account, a CI pipeline's OIDC token, an AWS instance role), and that credential is exchanged, again, conceptually a token-exchange pattern, for a short-lived, narrowly scoped credential in the target environment.
In the federated credential path, the workload can avoid storing a long-lived service-account key. Federation does not eliminate every secret or credential in the surrounding system, and the exact trust relationship, token lifetime, permissions, and failure behavior remain provider- and configuration-dependent.
For agents that span environments or need a portable, provider-neutral identity, SPIFFE and its reference implementation, SPIRE, define a standard identity document (an SVID) that a workload can present as either an X.509 certificate for mutual TLS or a JSON Web Token for HTTP-based calls. SPIFFE defines short-lived workload identity documents called SVIDs, which can be used as X.509 or JWT identities.
SPIRE is an implementation that can issue SVIDs using workload attestation and the SPIFFE Workload API. The exact attestation rules, rotation behavior, trust domains, and federation configuration must be verified for the deployment; SPIFFE should not be presented as an automatic security guarantee.
The operational trade-off is real and should not be glossed over: short-lived and federated credentials remove standing secrets, but they add a dependency on a token service, an attestation mechanism, and a policy engine being available and correctly configured.
If that infrastructure is down, agents cannot authenticate at all, which is a different failure mode than a leaked static key, not a strictly better one in every dimension, though it is generally the safer trade-off for anything touching sensitive resources.
Editorial recommendation: default every new agent workload to federated, short-lived credentials. Reserve static keys and long-lived secrets for the narrow set of legacy integrations that genuinely cannot support federation yet, and track those as a defined migration backlog rather than a permanent exception.
Threat Model: What the IAM Layer Can and Cannot Decide
The IAM layer should assume that an agent may be induced to select an unintended tool, receive malicious or misleading tool output, replay a still-valid credential, or continue a workflow after the initiating request has changed. Identity and token controls can bind a workload to a principal and constrain access, but they do not prove that model-generated reasoning is correct.
Treat prompt injection, tool substitution, parameter tampering, replay, confused-deputy behavior, credential theft, and stale delegation as separate threats. The control objective is to ensure that a compromised or misdirected agent still cannot exceed the authority enforced at the relevant boundary.
Least Privilege and Runtime Authorization for AI Agents
Static role assignment, granting an agent a fixed set of permissions at registration time, is necessary but not sufficient for anything beyond a narrow, predictable bounded agent.

The problem is that teams frequently over-provision because they cannot predict every tool call an agent might eventually need, which is exactly the failure pattern identity practitioners flag most consistently: broad standing permissions granted "just in case," left in place indefinitely.
The corrective is to combine static roles with request-time, or just-in-time, authorization for anything higher-risk than routine reads. Concretely, this means:
- Define a narrow static role that covers only the agent's routine, low-risk operations.
- Route anything above a defined risk threshold, a write to a production system, a financial transaction, a change to another identity's permissions, through a policy check evaluated at the moment of the call, not just at token issuance.
- Bind that policy check to the specific action and resource, not merely to "does this agent have a token," so that a compromised or malfunctioning agent cannot exceed its intended task even while holding a technically valid credential.
- Treat non-determinism as a design input, not an edge case: because the agent may call tools in an order nobody explicitly planned, the policy layer, not the model's own reasoning, has to be the actual enforcement point. A model deciding for itself that an action is appropriate is not an authorization control.
This is an editorial recommendation grounded in the community's own framing of the problem: dynamic, session-scoped privilege reduces standing exposure, at the cost of depending on a policy engine and secrets broker being reliable and well-tested, the same hidden-infrastructure trade-off described above for workload identity.
The Last-Hop Problem: Enforcing Policy at the API and Resource Boundary
Every hop in a delegation chain is a place where scope can quietly widen or intent can get lost. The single highest-leverage control point is the last one: the moment the request actually reaches the sensitive database, API, or system of record.

Regardless of how many identity and policy checks happened earlier in the chain, the resource itself, or a policy gateway placed immediately in front of it, should independently verify that this specific request, from this specific identity, is authorized right now.
This "last hop" or point-of-use framing has been described in industry security discussion as the gap between authorizing a workflow at initialization and authorizing the specific request that finally touches a mainframe, database, or other sensitive backend (IBM Technology's discussion of agentic runtime security).
This is a vendor-affiliated source and should be read as an architectural recommendation, not proof that any particular product delivers it, but the underlying logic holds independent of any vendor: a chain of correct decisions upstream does not guarantee the final action is still correct, especially in a multi-hop agent workflow where context can be lost or subtly altered between hops.
Practically, point-of-use enforcement means:
- The resource (or a gateway directly in front of it) evaluates the token's audience, scope, and any embedded delegation/intent claims on every sensitive call, not only at connection setup.
- High-impact actions (deletes, financial transfers, permission changes, production deployments) get an explicit policy evaluation at this boundary, separate from whatever authorization happened when the agent's workflow started.
- The enforcement point is independent of the agent's own reasoning. If the model has been compromised, manipulated through prompt injection, or simply wrong, the last-hop check is what stops the action, it must not be something the agent itself can talk its way around.
A point-of-use check like this is typically implemented as a policy-as-code query evaluated by a policy engine such as Open Policy Agent sitting in front of the resource, rather than as logic buried inside the agent's own code.
The gateway sends the engine a structured description of the request, who the token represents, what action is being attempted, what resource it targets, and only forwards the call if the engine returns an explicit allow.
The following Rego is an illustrative policy pattern for point-of-use enforcement, sketching the last-hop rules for the delegated scheduling agent and the autonomous cost-remediation agent introduced later in this article, including a hard deny for irreversible actions that no allow rule can override.
It is not a drop-in production policy: the gateway must define and validate the input schema, authenticate the token issuer, decide how deny-overrides are represented, handle missing fields, and test both allow and deny paths. Validate the syntax and semantics against the OPA version and integration used in the deployment before relying on it for access control.
# policy.rego — evaluated at the resource gateway, not inside the agent package agent.lasthop
import rego.v1
default allow := false
# Delegated agent: may write only to the calendar of the human
# it is currently acting for — never a different user's calendar.
allow if {
input.token.act.sub == "agent:scheduling-assistant-v2"
input.action == "calendar.events.write"
input.resource.calendar_owner == input.token.sub
}
# Autonomous agent: may stop or resize only tagged, pre-approved
# non-production resources.
allow if {
input.token.sub == "agent:cost-remediator-v1"
input.action in {"resource.stop", "resource.resize"}
input.resource.tags.environment == "non-prod"
input.resource.tags.owner_approved == true
}
# Irreversible actions are always blocked at this boundary,
# regardless of any allow rule above.
deny_irreversible if {
input.action in {"resource.delete", "data.purge"}
}
final_decision := "allow" if {
allow
not deny_irreversible
} else := "deny"Illustrative policy written in current Open Policy Agent Rego syntax, provided as an editorial pattern for point-of-use enforcement — not a certified or vendor-issued policy. input.token corresponds to the verified claims from the token-exchange example above; deny_irreversible demonstrates that a hard boundary can sit outside, and override, every other rule. Do not treat this as production-ready: before relying on any variant of it, add test cases for a missing act.sub, a wrong audience, cross-user calendar access, missing resource tags, delete/purge attempts, and policy-engine timeout or unavailability.
MCP and A2A Security Considerations
Two protocols now anchor a meaningful share of agent-to-tool and agent-to-agent communication, and both are actively evolving, treat every specific claim below as version-bound.
WebMCP belongs to a different boundary: it exposes selected capabilities from a live web document to a browser agent. It should therefore be evaluated alongside, not confused with, backend protocols such as MCP. This WebMCP guide explains the distinction between browser-bound tools, persistent MCP servers, direct APIs, and browser automation.
Model Context Protocol (MCP)
As of August 2026, the current finalized specification is 2026-07-28, which succeeded the 2025-11-25 revision. In the 2026-07-28 MCP Authorization specification, authorization is OPTIONAL for MCP implementations overall.

HTTP-based implementations that support authorization SHOULD conform to the specification, while STDIO implementations SHOULD NOT follow this HTTP authorization flow and should retrieve credentials from the environment instead. When authorization is used, the specification defines an MCP server as an OAuth 2.1 resource server and an MCP client as an OAuth 2.1 client.
It requires Protected Resource Metadata and defines discovery and client-registration options; Client ID Metadata Documents are the preferred registration path, and Dynamic Client Registration is formally deprecated in this revision but continues to function for backward compatibility during a defined deprecation window.
These rules are version-bound and should be re-checked against the MCP specification actually deployed.
Two practical implications for the NHI blueprint:
- first, MCP authorization governs the transport-level handshake between client and server, it does not by itself express delegated human intent, so a workload calling an MCP server still needs the token-exchange and delegation pattern described earlier layered on top;
- second, because MCP has revised its authorization model twice within roughly eight months, any implementation should be built against a specific, documented spec version and re-verified before each MCP upgrade rather than assumed stable.
Agent2Agent (A2A)
A2A is an open protocol, originally released by Google in April 2025 and transferred to Linux Foundation governance later that year, for agent-to-agent task exchange and discovery.
Each agent publishes a metadata document, an Agent Card, describing its capabilities, how it can be reached, and the security schemes it supports, and the current specification supports cryptographically signed Agent Cards for domain verification.

A2A's enterprise-readiness guidance defines client and server authentication responsibilities in detail: servers declare supported schemes (bearer tokens, API keys, mutual TLS, OpenID Connect) in the Agent Card's securitySchemes field, clients transmit credentials in standard HTTP headers, and servers must authenticate every incoming request against those declared requirements.
The specification also describes in-task authentication for secondary credentials an agent may need mid-task, and its own guidance states that agents interacting with backend systems, databases, or tools must enforce appropriate authorization before performing sensitive actions, without prescribing the specific enforcement mechanism, which is left to the implementer.
These mechanisms establish who is communicating and what an agent advertises; they do not by themselves define an organization's ownership registry, delegation policy, resource-level authorization, or incident-response process, so teams should not treat "we use A2A" as equivalent to "we have agent authorization solved." Record the exact A2A specification version used by each integration and verify its security requirements against that version before deployment.
Editorial recommendation for both protocols: do not build hard version assumptions into an architecture document or, worse, into compliance evidence. Record the exact MCP and A2A spec versions in force for each production integration, and treat a protocol version bump as a security-relevant change requiring the same review as any other authorization change.
Auditability: How to Preserve the Delegation Chain
Audit logs for agentic workflows are frequently described in generic terms, "we log agent actions", that fall apart under actual investigation. A canonical audit event for an agent action should capture enough to answer the accountability questions from the introduction without cross-referencing five separate systems:
| Field | Why it matters |
|---|---|
| Human/system initiator | The accountable principal, if one exists |
| Agent identity + instance ID | Which specific agent run acted |
| Delegation/token chain | Subject, actor, and audience claims across hops |
| Tool or protocol used | MCP server, A2A peer, or direct API |
| Policy decision | What rule was evaluated and the outcome |
| Resource and action | The exact object touched and operation performed |
| Result and correlation ID | Outcome, linkable across every hop in the chain |
The seven fields above are a proposed minimum event schema for this blueprint, not a universal compliance requirement. Organizations should map the schema to their logging standards, privacy obligations, retention policy, and investigation needs.
The practical test is whether an investigator can correlate the initiating principal, acting workload, authorization context, tool, policy decision, resource, action, and outcome without relying on an undocumented side channel.
A log that records "agent-42 called API X" without the delegating human, the policy decision, and a correlation ID tying it to the upstream request typically fails that test, even though it technically satisfies "we have logging."
Revocation, Token Expiry, Session Control, and Incident Response
Revocation is where good intentions in design most often collide with operational reality. A token that is technically revoked at the authorization server can still be accepted by a resource server that cached an earlier validation, or by a downstream service that received a delegated token before the revocation happened and has no mechanism to check it again.

This is implementation-dependent behavior, not a universal guarantee of any specific protocol, and it should be verified against the actual token-validation architecture in use, introspection versus self-contained JWTs behave differently, and self-contained tokens that are not re-validated against a revocation list will continue to be honored until they naturally expire.
A workable incident-response posture for agent identities needs, at minimum:
- A single disable path per agent. One control should stop new credential issuance where the identity provider supports it and should trigger blocking at gateways and resource boundaries where possible. Whether already-issued tokens are rejected immediately depends on token type, validation mode, cache behavior, introspection, and downstream services; document and test those conditions rather than assuming immediate invalidation.
- Short default token lifetimes for higher-risk actions. The shorter the lifetime, the smaller the window in which a compromised or miscalibrated token can do damage before it naturally expires, independent of whether active revocation succeeds everywhere.
- Explicit handling of cached and downstream tokens. If an agent has already exchanged a token for a narrower downstream token before revocation occurs, the incident response plan needs to know whether that downstream token is also invalidated or simply expires on its own schedule, and design the token lifetimes accordingly rather than assuming propagation happens automatically.
- Session-level kill switches for autonomous agents specifically, since as in the cloud-remediation example above, there may be no human in the loop to notice a problem and no natural point where the workflow ends on its own.
- Evidence preservation before disabling, where feasible, capturing the current audit trail and any in-flight action state before an emergency shutdown, so the incident can actually be investigated afterward.
NHI Inventory, Ownership, Lifecycle, and Shadow-Agent Governance
None of the technical controls above matter if an organization does not know an agent exists. Shadow agents, created by an individual team, connected to a personal API key or an ad hoc service account, and never registered anywhere central, are consistently raised as a practical governance gap across both practitioner discussion and published security research, and they are, by construction, invisible to every control described so far until they are found.

A minimum viable agent inventory records, per agent: a named owner (a person or team, not a distribution list), its declared purpose and authority model (delegated, bounded, or autonomous), the specific tools and data classifications it can reach, its model or framework version, its credential type and expiry policy, and an emergency disable path.
This is an editorial recommendation, not a compliance mandate from any single standard, but it aligns directly with the NIST AI Risk Management Framework's Govern and Map functions, which call for an organizational inventory and risk context for AI systems before measuring or managing risk, the AI RMF is voluntary guidance, not a binding regulation, and organizations should confirm which functions apply to their own risk-management program rather than treating it as a checklist.
Shadow-agent discovery in practice means combining a few overlapping signals rather than relying on any single source of truth: cloud IAM logs for unrecognized service principals making API calls, API gateway and MCP-server access logs for unregistered client IDs, secrets-manager audit trails for credentials nobody can attribute to a known agent, and a mandatory registration step built into whatever platform teams use to deploy agents internally, so that new agents are inventoried at creation rather than discovered after the fact.
An Actionable IAM Blueprint for Production Deployments
| Layer | Control Question | Primary Mechanism |
|---|---|---|
| Identity registration | Does every agent have a unique, verifiable identity and owner? | Central agent registry, mandatory at deploy time |
| Workload attestation | Can the platform verify which workload or runtime is requesting access? | Workload identity federation or SPIFFE/SPIRE attestation |
| Delegation | Can the system prove who or what authorized the agent to act? | OAuth token exchange (RFC 8693) with subject/actor claims |
| Authentication | Are credentials short-lived, scoped, and resistant to secret leakage? | Federated, short-lived tokens; no static keys |
| Authorization | Is access determined by task, resource, context, risk, and delegated authority? | Static roles plus request-time policy evaluation |
| Tool access | Are tools individually registered, scoped, monitored, and denied by default? | Explicit tool allow-lists; deny-by-default MCP/A2A connections |
| Resource enforcement | Does the final API/database/resource enforce authorization independently? | Last-hop / point-of-use policy check |
| Auditability | Can investigators reconstruct the human → agent → tool → resource chain? | Canonical, correlated audit-event schema |
| Revocation | Can access be stopped quickly across active sessions, tokens, and downstream systems? | Single disable path, short token lifetimes, kill switches |
| Lifecycle governance | Are agents inventoried, reviewed, rotated, suspended, and retired? | Central inventory with named owners and review cadence |
Request trace: human → application → agent → tool → resource
Every arrow is a policy decision and an audit event, not just a network call. The resource box re-checks authorization regardless of what was decided upstream.
Implementation Roadmap: First 30, 60, and 90 Days
| Phase | Focus | Deliverables |
|---|---|---|
| Days 1–30 | Discovery and inventory | Locate existing agents via IAM, API gateway, and secrets-manager logs; stand up a minimal agent registry; classify each agent by authority model (delegated, bounded, autonomous). |
| Days 31–60 | Credential and delegation hardening | Migrate static keys to workload identity federation for the highest-risk agents; implement token-exchange delegation for user-context agents; define the canonical audit-event schema. |
| Days 61–90 | Runtime enforcement and governance | Deploy point-of-use policy checks at the last hop for high-impact resources; implement a single-action disable path per agent; establish an ownership review cadence and retirement process for the inventory. |
Common Mistakes and Anti-Patterns
- One shared service account for multiple agents. This makes every downstream log entry ambiguous — an investigator cannot tell which agent, or which specific run, performed a given action, which defeats auditability before it starts.
- Long-lived API keys. A static key that never expires has an unbounded blast radius if leaked, and most leak vectors — logs, container images, source control — are exactly the places agent tooling tends to accumulate secrets by accident.
- Giving an agent the full permissions of the user. Reusing a user's own token instead of a scoped delegated credential means the agent can do anything the user could, including things the user never asked it to do.
- Letting the model make the final authorization decision. A policy decision made by the same model that could be manipulated through prompt injection or a flawed prompt is not a control — enforcement has to sit outside the model's own reasoning.
- Authenticating without checking intent or action. A valid token proves the caller was authorized to receive it; it does not prove the specific action being attempted right now is still appropriate.
- Logging only the service account, not the human delegator. This is the single most common way an otherwise reasonable audit setup fails an actual investigation — the log technically exists but cannot answer "who was responsible."
- Letting agents create or delegate privileges without policy enforcement. An agent that can grant itself, or another agent, broader access than it currently holds turns a contained incident into an unbounded one.
- Failing to inventory or retire abandoned agents. A credential nobody remembers exists is a credential nobody is watching, rotating, or revoking — this is the shadow-agent problem in its simplest form.
- Trusting tool names without validating tool identity and parameters. A tool call that is authorized by name alone, without verifying the actual endpoint and parameters match what was registered, is vulnerable to substitution and parameter-tampering attacks that a name-only check cannot catch.
Pre-Publication Verification Checklist
Before calling an agentic workflow ready for production, verify the following in the deployed environment:
- Every agent has a registered owner, authority model, runtime identity, and retirement path.
- Delegated workflows preserve subject and actor context where the token and resource architecture support it.
- Tokens are audience-restricted, scope-limited, time-bounded, and validated by the receiving resource.
- High-impact actions are evaluated by an enforcement point outside the model's own reasoning.
- MCP and A2A integrations record their exact specification versions and authorization assumptions.
- Audit events correlate the initiator, agent run, tool, policy decision, resource, action, and result.
- Revocation tests cover new issuance, cached tokens, refresh tokens, downstream exchanged tokens, and in-flight work.
- The OPA or equivalent policy layer has tests for missing claims, wrong audience, cross-tenant access, deny-overrides, and policy-engine failure.
Conclusion
The goal here is not merely to identify the agent. Authentication primitives are mature, but secure deployment still depends on correct identity binding, workload attestation, token validation, authorization context, and operational response.
What remains difficult in many production deployments is preserving authority, intent, least privilege, and accountability across every hop from the initiating principal to the final resource.
That is a design discipline, not a product category: it means separating identity concerns instead of collapsing them, checking authorization again at the last hop instead of trusting the first one, and keeping an inventory precise enough that "which agent did this, and who is responsible" always has an answer.
Take This Agentic IAM Blueprint to Your Security Team
Download the complete offline package to share with your platform, IAM, and compliance teams — formatted for enterprise review and execution.
FAQ: Non-Human Identities
What is a non-human identity in an AI-agent system?
A non-human identity is a digital identity used by a workload, application, service, bot, or AI agent to authenticate and access resources without a person directly performing the action. The identity may use a workload identity, managed identity, service account, certificate, or token, depending on the deployment and provider.
Should an AI agent use a shared service account?
A shared service account makes it harder to attribute actions to a specific agent, run, or owner and can enlarge the blast radius of a credential compromise. Prefer a distinct, registered workload or agent identity where the platform supports it, with narrowly scoped permissions, short-lived credentials, and an explicit ownership and revocation process.
How can an AI agent act on behalf of a user without impersonating the user?
Use an authorization design that preserves both the subject and the acting agent. OAuth 2.0 Token Exchange (RFC 8693) defines delegation and impersonation semantics, but whether a resulting token contains a verifiable actor chain depends on the authorization server, token format, and local policy. The downstream resource should receive only the scopes and audience needed for the task and should log both the delegating subject and the acting workload when the token format supports that context.
Is OAuth enough to secure an AI agent?
No. OAuth provides authorization flows and access tokens, while token exchange can express delegation or obtain a token for another audience. OAuth does not by itself decide whether a particular action is appropriate at the moment it is attempted, enforce business rules at the final resource, inventory agents, or provide a complete lifecycle and incident-response process.
Why use workload identity federation for AI agents?
Workload identity federation can let an external workload exchange a credential from its own identity system for a short-lived credential in a target environment, avoiding the need to distribute a long-lived service-account key. The exact trust configuration, supported providers, permissions, token lifetime, and failure behavior are provider-specific and must be checked in the target platform's documentation.
Where should authorization be enforced in an agentic workflow?
Authorization should be enforced at every boundary that can grant access, including the token service, tool or API gateway, and final resource. The API, database, or system of record should independently validate the presented identity, audience, scopes, and applicable policy for sensitive operations rather than trusting the agent's own reasoning or an upstream decision alone.
How should an organization audit AI-agent actions?
Use correlated events that record the initiating human or system when one exists, the agent and run identifier, the credential or delegation context, the tool or protocol, the policy decision, the resource, the action, the result, and a correlation identifier. The exact fields and retention period depend on the platform and compliance requirements, but logging only a shared service account is insufficient for reliable attribution.
How should an organization revoke an AI agent's access?
Define a disable path that stops new credential issuance, block the agent or workload at the gateway and resource where possible, and determine how already issued tokens are validated. Short-lived credentials can reduce the remaining exposure window, but revocation propagation is implementation-dependent; test the behavior for access tokens, refresh tokens, downstream exchanged tokens, caches, and in-flight actions in the deployed architecture.
📋 Article Timeline & History
Successfully updated on September 10, 2026 with the latest details.
This article was originally published on September 3, 2026.
Was this article helpful?










[…] Securing Non-Human Identities (NHI) for Agentic AI: An IAM Blueprint […]
[…] Securing Non-Human Identities (NHI) for Agentic AI: An IAM Blueprint […]
[…] Securing Non-Human Identities (NHI) for Agentic AI: An IAM Blueprint […]
[…] authority, identity lineage, last-hop authorization, MCP, and A2A, see Vertex Frontier’s non-human identity blueprint for agentic AI. For prompt injection, tool permissions, sandboxing, and autonomous side effects, see the agentic […]
[…] is the same last-hop principle described in Vertex Frontier’s guide to securing non-human identities for agentic AI: authentication proves that a credential or session exists; it does not by itself prove that a […]