groundy
ethics, policy & safety

AI Agents Outgrow OAuth: What Task-Scoped Authorization Requires

A preprint proposes task-scoped authorization for AI agents, replacing standing OAuth grants with natural-language slices that expire when the task ends. The design shifts the

11 min···5 sources ↓

A preprint, arXiv:2603.17170, first posted in March 2026 and revised in August, proposes scrapping OAuth-style standing grants for agents entirely, reporting 634 of 634 adversarial calls blocked under a task-scoped model in its own benchmark. The practical consequence: stop treating a service account plus coarse scopes as an agent governance boundary, and start specifying task-lifetime grants as a design requirement.

What does OAuth actually delegate, and why don’t scopes describe a task?

OAuth delegates access on behalf of a human, and its scopes are server-defined permission strings with no concept of the work being done. OAuth was built as an open standard for access delegation: a user grants a website or application access to their information on another service without handing over a password. The unit of delegation is the human’s intent, expressed once at a consent screen.

Scopes refine that grant, but only within the vocabulary the resource server chooses to publish. Per Auth0’s OAuth 2.0 documentation, a scope specifies the reason for which access to resources may be granted, and acceptable scope values depend on the resource server. That last clause does quiet but heavy work. mail.read, repo, and calendar.events are labels the server invented. They describe API surfaces, not tasks. Nothing in the grant encodes “read the thread from Alice this morning and draft a reply,” because OAuth has no slot to put that sentence.

This design was rational for its era. A human clicks “Allow,” an app receives a token scoped to a broad capability, and the human’s continued presence in the loop provides the real constraint on misuse. The token is coarse because the operator behind it is fine-grained. When the operator is a model interpreting instructions, that arrangement inverts: the entity holding the token has no judgment of its own, only the permissions you happened to mint.

Where do standing service accounts break for agent workflows?

Standing service-account credentials fail agents on granularity, expiry, and compromise tolerance simultaneously. The standard pattern for putting an agent in production is to issue it a service account, attach the broadest scopes it might plausibly need, and let it run. Each half of that sentence is a failure mode.

Granularity first. An agent’s trajectory is a sequence of tool calls across multiple servers, and the correct permission for step four often cannot be predicted at token-issuance time, only at task time. A scope like files.read admits every read the agent might ever perform on that server, including the ones a prompt-injected version of the agent would perform. The boundary you drew is coarser than the boundary the task implied, and the attacker who steers the agent inherits the difference.

Expiry second. A service-account credential is valid until revoked, and revocation is an operational event, not a property of the grant. The task the credential exists to serve may last ninety seconds. The credential lasts until someone remembers. Between those two points sits every stale token an attacker can lift from a log, a memory dump, or an over-permissive environment variable. The grant’s lifetime is decoupled from the work’s lifetime by construction.

Compromise tolerance third. The PAuth preprint frames this as the core assumption to fix: an authorization model for agents should hold even when the agent is compromised by malware or prompt injection. A standing token fails this test trivially. Whatever the compromised agent asks for, the token vouches for. The enforcement point trusts the credential, not the current intent, and the credential cannot tell the difference between the task you submitted and the instruction an attacker smuggled into a retrieved document.

The second-order consequence is organizational. Teams that adopt the service-account pattern have, often without noticing, decided that agent governance lives in documents: runbooks, acceptable-use policies, prompt-level instructions the model may or may not follow. The authorization layer, the one mechanism a model cannot route around, was left configured for a human that is no longer there.

What does PAuth’s task boundary actually enforce?

PAuth (Precise Task-Scoped Implicit Authorization) proposes that submitting a concrete natural-language task implicitly authorizes exactly the operations its faithful execution requires, and nothing else. The preprint describes two mechanisms that make that boundary enforceable rather than aspirational.

The first is the NL slice. Rather than a single grant issued at session start, each server independently derives a symbolic specification of the expected call, inspired by program slicing in compilers: from a program, extract exactly the statements relevant to a given computation. Applied to an agent task, the slice narrows “this server may be called” to “this server may be called in this shape, for this task, now.” Because each server derives its own slice, no central policy service needs a global view of the agent’s plan; the constraint is recomputed at each enforcement point from the task itself.

The second mechanism addresses the value-flow problem. Server outputs feed subsequent calls, and an adversarial server response is a classic injection vector. PAuth wraps server-produced values in signed envelopes that bind each concrete value to its symbolic provenance: which server produced it, under which slice, for which task. A downstream call that tries to spend a value outside its provenance fails the check. The envelope turns “the model said so” into a verifiable chain of custody.

The conceptual shift is what matters for IAM teams regardless of whether PAuth itself ships. The authorization boundary moves from something configured once by an administrator to something derived per task from the task itself. Governance stops being a document the model is asked to respect and becomes a constraint the infrastructure enforces. That is the difference between telling an agent what it may do and building a system where other actions do not execute.

How much weight should the AuthBench numbers carry?

The headline results, 100 of 100 benign tasks authorized and 634 of 634 adversarial calls blocked, are self-reported on a benchmark the authors built, in a single non-peer-reviewed preprint with zero independent replication. Treat them as a signal to test against your own traces, not as an established result.

The provenance deserves precision. Per the preprint, AuthBench spans five service suites with 100 benign tasks and 634 adversarial calls, built by the PAuth authors on top of AgentDojo and cross-validated on OpenClaw. Building your own benchmark is not disqualifying; every new problem needs a first instrument. But a perfect score on a home-built adversarial distribution tells you the defense handles the attacks its designers thought to include. It says less about attacks drawn from a distribution the designers did not anticipate, which is the only distribution production traffic comes from.

The venue adds a second discount. arXiv’s own description of its process states that submissions pass moderation for topicality and scholarly value, are not peer-reviewed, and that contents are wholly the submitter’s responsibility, presented as-is without warranty. That is the correct epistemic frame for every number in the paper: plausible, structured, checkable in principle, verified by no one outside the author list.

Perfect blocking rates deserve particular skepticism in security evaluation. A 634/634 result means either the mechanism is very strong against this attack class, or the attack class is well-matched to what the mechanism checks. The honest reading, given a single unreplicated source, is that the paper demonstrates feasibility under its own conditions. The way to consume it is to replay the idea against your own agent traces: log every tool call your production agents make, ask which calls a task-derived slice would have admitted, and measure how much of your current standing scope surface that eliminates. That experiment costs you logging infrastructure you should have anyway, and its result is worth more than any preprint’s self-report.

How do OAuth delegation and task-scoped grants compare?

The two models differ on every axis that matters for machine-initiated workflows, which is the strongest evidence that this is a redesign rather than a configuration change.

AxisOAuth delegation (status quo)Task-scoped grants (PAuth proposal)
Grant granularityServer-defined scope strings (mail.read, repo)Task-derived NL slice per server, describing the expected call
Scope durationStanding credential until manual revocationTask-bounded rather than standing
Compromise toleranceCompromised agent inherits full token scopeBoundary claimed to hold under malware or prompt injection
Provenance bindingOpaque bearer token; values untracked between callsSigned envelopes bind values to symbolic origin
Protocol fitAssumes sessions and human consent flowsTask context must travel with every call across MCP’s wiring
Evidence maturityRatified open standard, deployed everywhereSingle-source, unreplicated preprint on an author-built benchmark

Read the last row before the others. Five of six axes favor the task-scoped model for agent workloads, and the sixth is the one that decides what you can deploy this quarter. OAuth’s delegation model is specified, implemented, audited, and understood by every identity team on earth. PAuth is a paper on arXiv with a benchmark its authors constructed. The table is a requirements document, not a purchasing decision.

The protocol-fit row hides the sharpest open question, and it deserves its own treatment.

What does MCP’s architecture mean for task-scoped grants?

A task-scoped scheme lives or dies on where task context lives between calls, and MCP does not answer that question. The protocol standardizes how hosts, clients, and servers exchange tools and resources, not why a given call is being made. That gap is the awkward part for exactly the class of design PAuth represents.

The Model Context Protocol, introduced by Anthropic in November 2024 to standardize how AI systems integrate with external tools and data sources, has become the default wiring for agent tool use. In December 2025, Anthropic donated MCP to the Agentic AI Foundation, a Linux Foundation directed fund co-founded by Anthropic, Block, and OpenAI.

Transports trend stateless because stateless is easier to scale, restart, and load-balance; the web settled that argument decades ago. But a task-scoped grant is inherently stateful in concept. The task is the state. The slice is derived from it and the envelopes reference it. If the transport does not maintain a session, every call must carry enough context to reconstruct which task it belongs to, and every enforcement point must verify that binding independently rather than trusting a session identifier established earlier.

This is not necessarily fatal to the design. Signed envelopes that bind values to provenance are, in fact, one plausible way to carry task context across a sessionless transport, since the envelope travels with the value rather than living in server-side session state. But it does mean the preprint’s design and the protocol’s current shape need an explicit reconciliation, and that reconciliation is an engineering problem nobody has published a validated answer to. Authorization models designed against session-state assumptions should be re-examined before they anchor any new architecture.

What should you specify now, and what should you wait on?

Keep OAuth for user-facing delegation, stop treating standing service accounts as a governance boundary, and write task-lifetime grants, per-server call expectations, and value provenance into your next agent authorization design as requirements, while treating PAuth’s numbers as unreplicated signal rather than a deployable control.

The actionable split looks like this. Now: inventory the service accounts your agents run on, and measure the gap between what their scopes permit and what observed tasks actually call. Add per-call logging with task identifiers so a task-scoped boundary has data to be derived from later. Require that any new agent tooling purchase answers three questions: can grants be scoped to a task rather than a role, do they expire with the task, and can values be traced to the server that produced them. Vendors who cannot answer are selling you the current failure mode with better packaging.

Wait on: PAuth itself, until the numbers survive contact with someone else’s benchmark. The strongest limitation in the research is structural, not incidental. Every headline figure originates from AuthBench, built by the paper’s authors atop AgentDojo, in a single non-peer-reviewed preprint. The perfect blocking rate may reflect the adversarial distribution the authors chose rather than real-world agent workflows, and arXiv’s moderation process, which checks topicality and scholarly value rather than correctness, offers no backstop. None of this makes the design wrong. It makes the design unproven in the specific way that matters before you build on it.

The deeper shift will outlast the preprint either way. OAuth answered the question “what may this application do on this user’s behalf,” and agents broke the question by making the application non-deterministic and the user absent. Whatever replaces the service-account pattern will have to answer a harder one: what may this call do, given the task that produced it. PAuth is a concrete, evaluated answer to that question, and it arrives with numbers attached. The numbers are its own. The question is everyone’s.

Frequently Asked Questions

How does PAuth’s stateless design reconcile with MCP’s July 2026 removal of session tracking?

PAuth avoids server-side session state by embedding task context directly into signed value envelopes that travel with each data point. This allows enforcement points to verify provenance independently on every call, satisfying MCP’s stateless requirement without relying on a persistent session identifier that the protocol no longer maintains.

What is the primary risk of relying on AuthBench’s 634/634 blocking rate for production security?

The benchmark was constructed by the same authors who designed the defense, creating a risk of overfitting where the system blocks only the specific adversarial patterns its creators anticipated. Since no independent replication exists, the perfect score likely reflects the benchmark’s curated distribution rather than the unpredictable variety of real-world prompt injection attacks.

How does PAuth’s per-server slicing differ from central policy engines like OPA or Cedar?

Central engines require a global view of the agent’s plan to evaluate policies, creating a single point of failure and latency bottleneck. PAuth distributes the logic so each server derives its own symbolic slice locally from the task, eliminating the need for a central policy service to understand the full multi-tool trajectory before authorizing a specific call.

What operational change is required to prepare for task-scoped authorization before PAuth is standardized?

Teams must instrument agents to log every tool call alongside the specific natural-language task that triggered it. This data creates the necessary denominator to measure the gap between current standing scopes and actual task requirements, providing the empirical evidence needed to justify the infrastructure investment in task-derived grants.

sources · 5 cited

  1. OAuthen.m.wikipedia.orgcommunityaccessed 2026-08-26
  2. What is OAuth 2.0? Definition & Examples | Auth0auth0.comvendoraccessed 2026-08-26
  3. About arXiv - arXiv infoinfo.arxiv.orgprimaryaccessed 2026-08-26
  4. Model Context Protocolen.wikipedia.orgcommunityaccessed 2026-08-26