Clients used to be written. Now agents assemble them at runtime.
The protocols underneath weren't built for that.
Software used to know at build time what it would call and what it would need.
Now agents decide in the moment, against services they've never seen — the old protocols assumed neither.
In OAuth and OIDC, a client has no independent identity — a client_id at Google is meaningless at GitHub. Agents have no identity of their own to carry between services.
API keys are a shared secret issued by the service and copied to the client. Any secret copied to a workload will eventually leak somewhere it shouldn’t.
Agents need authorization decisions mid-task. Consent lands on human timelines — and today's protocols treat pending as an error, not a first-class state.
Agents pick their tool chain at runtime, one call at a time. The sequence isn't declared in code — they choose the next tool as the task unfolds, and the chain shifts with every task.
A scope is standing permission, not per-call intent. `mail.read` looks the same whether the agent is summarizing or scraping — policy can't tell them apart.
A single task can span orgs, clouds, and identity domains. Workload identity (SPIFFE) stops at the trust-domain edge — and authority stops there too.
By Dick Hardt, author of OAuth 2.0
After implementing authorization for our MCP server, I concluded OAuth is not a good fit for MCP ↗ and started working with others in the identity community who'd hit the same walls.
AAuth is what came out of that work. It gives every HTTP client its own cryptographic identity and carries identity claims and authorization claims in the same token. It coexists with OAuth 2.0 and OpenID Connect rather than replacing them.
The web gave servers identity. It's time clients got the same.
AAuth has four access modes. All replace API keys with cryptographic identity.
Capability grows from simplest to most capable — adopt incrementally as your needs expand.
Resource authorizes off the agent identifier alone — no authorization flow, no tokens beyond the agent token.
Try the protocol, explore the SDKs, and follow the conversation.
The demos and Playground run against the Hellō Beta Person Server — data is reset regularly, so don't store anything you need to keep.
Browse AAuth access modes, tokens, and headers with side-by-side wire examples.
A minimal AAuth identity resource — one endpoint that returns who the caller is.
A notes API using AAuth R3 ↗. Agents declare OpenAPI operations; consent is over actions, not endpoints.
Mark Hendrickson — Per-row attribution for agent writes via AAuth identity in Neotoma
Karl McGuinness — Mission is now a first-class protocol object — is the layer strong enough?
Christian Posta — Working demo with Keycloak, Agentgateway, Java/Python/Rust
Karl McGuinness — Open-world OAuth, discovery, and bounded authority across delegation chains
Karl McGuinness — Whether AAuth is the right protocol foundation for mission-bound authorization
Christian Posta — Comprehensive overview of AAuth architecture and design
Christian Posta — The case for independent agent identity
Join the discussion on Slack.
Drop in to ask questions, share what you're building, or listen along.
Sign up below or at lu.ma/aauth ↗.