Resource-Managed Access (2-party)
The resource manages authorization entirely itself — no PS or AS involved. It verifies the agent's signed request, applies its own policy (allowlist, pre-registered key, or internal rule), and issues a session token in the AAuth-Access header for subsequent calls. The session token is opaque to the agent — the resource wraps its own authorization state, which MAY be an existing OAuth access token — and it is the one AAuth credential a resource issues for its own consumption. A resource declares this mode as access_mode=session-token in its metadata.
Agent presents its agent token in the Signature-Key header using sig=jwt.
Resource verifies the agent token JWT and HTTP signature, then checks its internal policy.
This agent's domain is allowlisted — resource grants access immediately.
Resource issues an AAuth-Access header carrying a session token for subsequent calls.
The session token is a token68 string minted by the resource — not a JWT, no PS or AS. It names the continuing relationship the resource has established with this agent for this person.
Step 1: Signed GET /data → resource checks policy → 200 + session token
api.example
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQ…
sig=("@method" "@authority" "@path" "signature-key");created=1700000000;alg="ed2…
sig=:Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4…
Covered Components
Signature Base
Signature-Key Header
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQrand0In0…"
Signature-Input Header
sig=("@method" "@authority" "@path" "signature-key");created=1700000000;alg="ed25519"
{"alg":"EdDSA","kid":"agent-key-1","typ"?:"aa-agent+jwt"}{"iss"?:"https://agent.example","dwk"?:"aauth-agent.json","sub"?:"aauth:local@agent.example","jti"?:"a6ae301d-1dc7-4b75-8f8b-5612197664a7","cnf"?:{"jwk"?:},"iat"?:1776222894,"exp"?:1776226494}