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 an opaque AAuth-Access token for subsequent calls. The token is a simple opaque string, not a JWT — the resource is its own authority.
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 with an opaque token for subsequent calls.
The opaque token is a simple string minted by the resource — not a JWT, no PS or AS.
Step 1: Signed GET /data → resource checks policy → 200 + opaque 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","sub"?:"aauth:local@agent.example","dwk"?:"aauth-agent.json","jti"?:"a6ae301d-1dc7-4b75-8f8b-5612197664a7","cnf"?:{"jwk"?:},"iat"?:1776222894,"exp"?:1776226494}