Delegated Authority and Zero Ambient Authority
- By
- Sourav Banerjee
- Last updated
- 12 Nov 2026
An agent that can do anything any user could do will, sooner or later, do it for the wrong user.
Identity tells you who sent the request. Authority decides what the system may do while serving it. In most agent platforms the two drift apart: the user is verified carefully, then the agent acts with a broad service account that ignores who the user is. This lesson shows how to carry the user's authority through every hop, so that the agent can never do more than the person it is working for.
Objectives:
- distinguish authentication, authorisation and delegation in an agent request;
- explain ambient authority and why it turns injection into damage;
- scope an agent's credentials to one user, one tenant and one task;
- handle agent-to-agent delegation without passing on the caller's full rights.
Separate Three Questions
Three questions sound alike and need different answers.
- Authentication: who is this? Answered by verifying the token, as in Identity Verification with SSO and OIDC.
- Authorisation: may this principal do this action on this resource? Answered by the access rules, as in The Seven Access Rules.
- Delegation: on whose behalf is this component acting, and with how much of their power? This is the question agent systems most often skip.
A support agent that reads a customer's orders and issues refunds is acting on behalf of two parties at once: the customer who asked, and the company that set the refund policy. Its authority should be the overlap of the two, not the sum.
Delegate Between Agents Without Inheriting Everything
Multi-agent systems add another hop. A supervisor agent hands a sub-task to a worker agent. The easy design passes the supervisor's token along, and the worker now holds every right the supervisor had.
Instead, the supervisor requests a new, narrower token for the worker, scoped to the sub-task. The worker's identity is recorded as the actor, the original user stays the subject, and the chain of actors is kept for audit. If the worker is compromised by a poisoned tool result, the blast radius is the sub-task, not the whole run.
Check two things when a receiving agent gets work:
- Who is the receiving agent? It authenticates as itself, not as the caller.
- What may it do? Only what the new token allows, which is never more than the caller held.
Keep Secrets Out of the Model's Reach
Credentials belong to the runtime, never to the context. The model sees a tool called issue_refund(order_id, amount). It never sees the payment API key, and it never chooses which credential to use. Secrets come from a vault at call time, as in Secrets and Per-Tenant Encryption Keys. A model that can read a key can be persuaded to repeat it.
Worked Example: One Refund, Three Hops
A customer of tenant Acme asks the support agent to refund order 4471.
- Edge. The gateway verifies the customer's token, then exchanges it for a five-minute token: subject
customer-981, actorsupport-agent, tenantacme, scopesorders:read:selfandrefunds:create:max=200. - Agent to refund worker. The support agent delegates the refund to a payments worker. It requests a second token: same subject, actor
payments-worker, scoperefunds:create:order=4471:max=200. - Payment service. It checks the token: the subject owns order 4471, the amount is under 200, the tenant matches. It records the actor chain
support-agent → payments-workerin the audit log.
Now suppose the ticket contained injected text asking for a refund on order 5520, which belongs to another customer. The model may well propose it. The payment service rejects it, because the token's subject does not own order 5520 and its scope names only order 4471. No prompt wording made that decision.
Key Takeaways
- Authentication, authorisation and delegation are three separate questions, and agents most often skip delegation.
- Ambient authority is power held without being granted for the task. It decides how much damage an injection can do.
- Exchange the user's token for a short-lived, scoped one that names both the acting agent and the user.
- Agent-to-agent delegation issues a new, narrower token per sub-task, never the caller's own.
- Credentials live in the runtime and the vault, never in the model's context.
Check Yourself
1. What is ambient authority, in one sentence?
Power a component holds by default rather than being granted for the current task, such as a service account that can read every tenant's data.
2. Why does token exchange beat passing the user's original token downstream?
The exchanged token is shorter-lived, narrower in scope and records the acting component as well as the user, so each downstream service can check both and the audit log shows the full chain.
3. A supervisor agent passes its own token to a worker. What is the risk?
The worker inherits every right the supervisor had. If a poisoned tool result compromises the worker, the attacker gets the supervisor's full authority instead of one sub-task's.
References
Sources: It builds on the identity, secrets and access-rule lessons in this track and on the confused-deputy section of The Model Context Protocol.