Person Identity Access
The agent obtains a person token (aa-person+jwt) from its PS for one resource and presents it via Signature-Key in place of its agent token. The resource learns which person the agent acts for and serves on that identity alone — no resource token, no auth token, and the PS is never in the path of a call. When an endpoint needs more than identity, the resource challenges there with requirement=auth-token, and the resource token it issues copies ps, sub and the person token's jti out of the token it just verified.
The agent signs with its agent token. That identifies the agent, not the person.
The resource needs to know which person it is serving, so it answers 401 with requirement=person-token. The header carries no parameters — the agent already knows where to get one.
An agent with no PS cannot satisfy this requirement and surfaces it as an error.
Step 1: Signed GET /me with agent token → 401 requirement=person-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","jti"?:"a6ae301d-1dc7-4b75-8f8b-5612197664a7","cnf"?:{"jwk"?:},"ps"?:"https://ps.example","iat"?:1776222894,"exp"?:1776226494}