Blog
Saved0

AI agent identity: keeping the user's authority from request to action

The user signed in. Three hops later, a service account posted the credit. Why identity has to travel with every step an agent takes, and how to recheck it when the work resumes.

LinkedIn
On this page
  1. The user signed in. The system acted as someone else.
  2. Why isn't authentication enough for AI agents?
  3. Identity is a stack, not a user ID
  4. Where does identity get lost in an agent workflow?
  5. Don't forward the user's token
  6. Three actors, never one principal
  7. Delegation should only ever narrow
  8. Paused work needs its authority checked again
  9. Retrieval is an authorization boundary too
  10. Agents can plan. They can't create authority.
  11. Approval adds authority. It doesn't erase the origin.
  12. Authorize at the point of change
  13. Common anti-patterns
  14. Ten rules for AI agent identity
  15. The result: authority survives the architecture
  16. Frequently asked questions
  17. How Frozion keeps authority with the work
  18. Sources
The short answer

AI agent identity is more than a login. Every consequential step needs to know who started the request, who is acting now, which software is executing, under whose delegated authority, and whether that authority is still valid. Carry that context with the work, narrow it at each hop, and recheck it when the work resumes, right before the change.

The user signed in. The system acted as someone else.

A regional finance analyst at a multinational manufacturer opens a customer account that belongs to the company's European legal entity. She may request credits up to EUR 25,000 for that entity. She may not approve or post them.

An agent gathers the contract, recent service incidents and prior credits, and proposes an EUR 18,400 credit. Deterministic checks confirm the amount, currency and remaining annual allowance. A manager with the right authority reviews the exact proposal and approves it.

The credit then waits for the nightly finance window. During the wait, the analyst moves to another region and loses her authority over the European entity. Company policy says the requester must still be entitled when the credit is posted, even after a manager approves.

When the work resumes, the queued message holds only an execution ID, a customer ID, the amount and an approval ID. A background worker signs in with a global service credential that can post credits for every legal entity. The finance API checks that credential, validates the payload and posts the credit. Every component reports success.

Timeline of a credit request: the analyst's narrow authority is replaced by a worker's global credential after a nightly wait
Over five hand-offs, the analyst's authority quietly becomes the worker's.

Nothing was hacked, no credential leaked and no model hallucinated. The architecture quietly swapped the narrow authority of the business request for the broad authority of whichever worker resumed it. This is the most common identity failure in agent systems, and it's invisible to every component that took part.

It's also common. IBM found that 97% of organizations that reported an AI-related breach lacked proper AI access controls. OWASP lists identity and privilege abuse (ASI03) among the top risks for agentic applications.

Why isn't authentication enough for AI agents?

Authentication is a moment. Authorization is an obligation that lasts as long as the work does. Signing in proves that someone controls a credential. It doesn't settle whether a later action, on a later record, for a later purpose, is still allowed.

Zero-trust guidance makes the same point: access is decided per resource and per request, never granted because a subject signed in once or came through an approved app. Attribute-based access control frames each decision as subject, action, resource and environment, and the decision is only as good as those attributes are current.

Agents multiply the boundaries where that proposition can change. The person who started the request may differ from the person who approved it, the service that executes it, the agent that proposed it and the system that commits it. And a durable workflow can wait long enough for roles, policies and records to change underneath it.

Identity is a stack, not a user ID

Most systems pass identity along as a username or subject claim attached to logs. That's enough to correlate events. It isn't enough to decide anything. A governed runtime needs to answer several distinct questions at each step:

DimensionThe question it answersWhy it matters
Initiating subjectWho started the business request?Keeps accountability with the person whose authority applies.
Current actorWho is deciding or acting right now?Separates the requester from an approver, operator or resumed worker.
Workload identityWhich service or agent is executing?Authenticates the software without mistaking it for business authority.
Delegation chainOn whose behalf, through which hops?Stops a broad service credential from washing away a narrow user's limits.
Tenant and legal entityWhich organizational boundary applies?Protects tenant and entity isolation.
Resource and actionWhich record and which operation?Enforces authorization at the real target, not just the front door.
PurposeWhy is this happening?Lets policy tell legitimate uses of the same data apart.
Assurance and freshnessHow strongly, and how recently, was authority established?Decides when to step up, re-authenticate or recheck.
Approvals and decisionsWhich policy decisions and human sign-offs apply?Binds authority to a specific proposal and version.
Identity as a stack of layers carried with each step
Identity is a stack, not a user ID.

Where does identity get lost in an agent workflow?

Rarely in one place. It erodes through a series of reasonable local shortcuts, each made by a team that kept only what its own component needed.

BoundaryWhat typically gets lostWhat should happen instead
Interface → workflowTenant, selected record, purpose and assurance shrink to a user ID.Build the full authority context from the verified session.
Workflow → queue or eventThe message carries the business payload and nothing else.Persist references to the execution, approval and authority, never reusable tokens.
Worker resumeThe worker signs in as itself and silently becomes the business actor.Rebind the worker to the saved authority context and authorize again.
RetrievalTenant filtering applies in one store, not in the index, cache or feature service.Apply permission-aware retrieval everywhere context is assembled.
Agent or modelA visible tool is treated as permission to use it.Treat model output as a proposal and check every tool call.
Sub-agent or sub-workflowThe child inherits the parent's broad credentials without its limits.Pass a scoped grant that is never wider than the parent's.
Policy checkThe policy engine sees only the service principal.Evaluate the full subject, workload, resource, action and purpose.
Human approvalApproval becomes a detached approved = true.Bind approver, proposal, conditions and expiry together.
External APIA global service credential counts as business authorization.Authorize at the point of change, with the narrowest credential available.
LogsThe record shows which service called, not on whose behalf.Record the authority chain through to the confirmed outcome.

Don't forward the user's token

The tempting shortcut is to pass the user's original access token through every service. It looks like identity propagation, but it creates new problems:

  • The token was issued for the interface, not for the downstream resource.
  • Its scopes are usually broader than the current step needs.
  • It can outlive the business purpose, or be copied into queues and logs and replayed.

OAuth guidance addresses each of these: audience restriction, token exchange for delegation (RFC 8693), fine-grained authorization details (RFC 9396) and sender-constrained tokens. The pattern that follows separates what the authority means from the credential that proves it at one boundary:

  1. Validate the user or upstream assertion on the way in: issuer, audience, assurance and expiry.
  2. Create a durable authority context from verified facts and references to current attributes.
  3. At each consequential boundary, work out the minimum authority this action needs.
  4. Exchange or mint a short-lived, audience-specific credential where the target supports it.
  5. Authenticate the workload separately, so the target knows which software is calling.
  6. Authorize the whole combination: subject, delegation, workload, tenant, resource, action, purpose and current policy.
  7. Record the decision and the outcome, never the reusable secret.

Three actors, never one principal

A consequential action involves at least three actors. Collapsing them into one is how authority gets lost.

ActorRoleWhat must not happen
Initiating subjectStarts the request and supplies the starting authority.Disappear because a service continues the work.
Current actorMakes the present decision, approval or intervention.Be recorded as the original requester.
WorkloadAuthenticates the agent, worker or gateway that makes the call.Be mistaken for unrestricted business authority.
Delegated actorActs within authority received from someone else.Silently widen scope or hide the chain.

A workload can be strongly authenticated and still lack the authority to take an action for a particular person. An authorized person may be unable to call the target API directly. The runtime has to represent the relationship, not pick one identity and drop the others.

Delegation should only ever narrow

Delegation isn't a transfer of every privilege. Each hop should keep the origin and narrow authority to what the next step, record, purpose and current policy allow. In practice, what the next step may do is the intersection of:

  • the authority the parent currently holds
  • the capabilities and resources the child declares
  • the tenant, entity, purpose and data-classification limits of the request
  • current policy and conditions
  • any required human approval or separation of duties

If a background worker has broader technical permissions than the requester, those permissions let it carry out a validated decision. They don't let it redefine the decision. Any widening has to be explicit, separately authorized and recorded.

Authority narrowing at each delegation hop, shown as nested shapes
Delegated authority is the intersection of what each layer allows.

Paused work needs its authority checked again

Queues, timers, callbacks and human waits destroy ambient session context. That's why they expose identity weaknesses that synchronous prototypes never show.

When work resumes, the worker authenticates as itself. The runtime then has to re-establish the business authority from the saved context and ask:

  • Is the person who started this still entitled to it?
  • Has the delegated authority expired or been revoked?
  • Does the approval still apply to this exact proposal?
  • Did the record, legal entity, policy or purpose change during the wait?
  • Which current credential may be issued for the target?

Retrieval is an authorization boundary too

Identity applies before the model call, not just before the tool call. The context an agent decides with can combine database rows, documents, search results, feature values and earlier decisions, each with its own permission rules.

A tenant filter on the main database isn't enough if a vector index, cache, document store or feature service runs under a broader service identity. A context window is a disclosure boundary. You can't ask a model to ignore information the system wasn't allowed to show it in the first place.

Agents can plan. They can't create authority.

An agent may break down a goal, choose among permitted tools, gather evidence and revise its plan. None of that creates authorization. A tool description is not a permission grant, and a generated plan is not authority.

When an agent asks to use a capability, the request should arrive as a typed proposal. The runtime then checks the resource, action, authority, policy and current state before the call goes through. The same applies to sub-agents: each receives a scoped grant that is never wider than its parent's, and each returns evidence the parent can include in the record.

Approval adds authority. It doesn't erase the origin.

A human approval adds another actor and another source of authority. It shouldn't replace the original requester, tenant, purpose or proposal with a generic approved = true. The approval needs to record the exact proposal, what the reviewer saw, the approver's identity and scope, any conditions, and when it expires. If a material fact changes, the runtime rechecks or asks again. The guide to human-in-the-loop approval, covers this in depth.

Authorize at the point of change

The final API call is where identity becomes business consequence. A valid TLS session, a valid service credential and a well-formed request prove that an authenticated workload sent a valid message. They don't prove that the person behind it was entitled to cause that change, on that record, for that purpose.

Right before a consequential call, the runtime should be able to establish the exact resource and operation; the initiating subject, current actor and workload; the narrowed delegation; the tenant, purpose and current policy; the applicable approval; a stable operation identity for retries; and the confirmation that came back. Where a target system can't express delegated authority, the runtime enforces the decision immediately before the call and uses the narrowest credential available. A broad service account should never be the unexamined proof that a business action was allowed.

Common anti-patterns

Anti-patternWhy it failsWhat to do instead
One token everywhereAudience, scope, lifetime and replay risk differ at every boundary.Carry the authority context; issue short-lived, audience-specific credentials.
Service account as universal authorityThe workload replaces the business subject and its limits.Authorize the subject, workload, resource, action and purpose together.
User ID as log metadataCorrelation survives; enforceable authority doesn't.Carry the complete, versioned authority context.
Authorize only at the front doorTenant, record, purpose and policy can change later.Check at every consequential boundary, and again on resume.
Queue message without authorityThe resumed worker can't tell who may continue or why.Persist authority references; rebind on resume.
Tool visibility equals permissionAgents call capabilities because they're listed.Check every tool call before it runs.
Logs record only the workerYou can prove which service called, not whose authority caused the effect.Record the authority chain through to the confirmed outcome.

Ten rules for AI agent identity

  1. Model identity as a stack: requester, current actor, workload, delegation, tenant, resource, action, purpose, assurance and expiry.
  2. Separate authentication from authorization. A valid credential doesn't settle the current question.
  3. Propagate authority, not one reusable token.
  4. Narrow at every delegation. Children get no more than the parent, policy and resource allow.
  5. Recheck after every wait. Workers authenticate as themselves and rebuild business authority from saved state.
  6. Treat retrieval as authorization. Every context item must be permission-compatible.
  7. Treat model and agent output as proposals. Plans and tool choices don't create authority.
  8. Bind human approval to the exact proposal.
  9. Authorize again at the point of change.
  10. Record the authority chain from request to confirmed outcome, without storing reusable secrets.

The result: authority survives the architecture

Agent systems are usually described as a sequence of intelligent decisions. In production they're also a sequence of authority hand-offs: a user becomes a workflow, a workflow becomes a queued message, a message becomes a worker, a worker becomes an API call. Each hand-off is a chance to lose, widen or misattribute authority.

Making those hand-offs explicit lets the runtime keep the origin of intent, authenticate every workload, narrow every delegation, recheck current conditions and prove whose authority stood behind the change that finally happened.


Frequently asked questions

What is identity propagation for AI agents?

It is the practice of carrying the initiating user, the current actor, the executing workload, the delegation chain, tenant, purpose and expiry across every boundary an agent's work crosses, so each boundary can authorize the next action on its own.

Why isn't a service account enough for an AI agent?

A service account proves which software is calling. It says nothing about whether the person the agent acts for is allowed to cause this action, on this record, for this purpose, right now. Used alone, it replaces the user's narrow authority with the workload's broad one.

Should we forward the user's access token through the agent?

No. A token issued for one audience is the wrong proof for another, can outlive the business purpose and can be replayed if copied into queues or logs. Carry the meaning of the authority, and issue a short-lived, audience-specific credential at each boundary.

How does this work for agents we already run?

Route the agent's tool calls through a governed runtime over MCP or HTTPS. The runtime gives the agent its own identity, takes on the role of the person it acts for, and checks authority at each call and again when paused work resumes, without changing the agent itself.

With Frozion

How Frozion keeps authority with the work

Every agent in Frozion has its own identity. Through Agent Delegation, it takes on the role of the person it acts for at runtime and never exceeds that person's authority. System credentials are stored once in Global Variables and are never shown to an agent or a person again. Authority narrows at each hop, and Frozion checks it again when the work resumes, days later, right before the change. Kill switch and revoke stop an agent at once.


Sources

  1. NIST SP 800-207, Zero Trust ArchitectureResource-focused, policy-driven access; no implicit trust from a prior authentication.
  2. NIST SP 800-162, Attribute Based Access ControlAuthorization over subject, object, operation and environment attributes.
  3. NIST SP 800-63-4, Digital Identity GuidelinesAssurance, federation assertions and audience restriction.
  4. RFC 8693, OAuth 2.0 Token ExchangeImpersonation and delegation semantics.
  5. RFC 9396, OAuth 2.0 Rich Authorization RequestsFine-grained authorization details.
  6. RFC 9700, Best Current Practice for OAuth 2.0 SecuritySender-constrained tokens and current OAuth security practice.
  7. OWASP API Security Top 10 (2023)Broken object-level and function-level authorization.
  8. OWASP Top 10 for Agentic Applications (2026)ASI03, identity and privilege abuse.
  9. IBM, Cost of a Data Breach 202597% of organizations with an AI-related breach lacked proper AI access controls.
  10. W3C PROV-O: The PROV OntologyA neutral model for provenance relationships.
More in Governing AI agents

Governing AI agents

Identity & access 3
Runtime policy 3
Tools & MCP 1

Other topics

Pick up where you left off: