PS Authorization Access (3-party)
The resource has no access server. The agent first obtains a person token from its PS, presents it at the resource's authorization endpoint, and gets back a resource token whose aud is the PS URL. The PS resolves the person token the resource token names, applies the person's consent, and issues the auth token itself. The auth token's iss is the PS, and the resource applies its own policy to the claims it asserts.
The agent signs with its agent token and names the resource it wants a person token for. resource is REQUIRED and becomes the token's aud.
The PS issues aa-person+jwt with a directed sub for that resource and cnf.jwk bound to the agent's signing key.
A person token carries no scope and no account — it identifies the person, it does not authorize anything.
The PS MAY require the person's approval first and return 202 with requirement=interaction.
Step 1: POST /person {resource} → 200 person_token
ps.example
application/json
sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQ…
sig=("@method" "@authority" "@path" "content-type" "content-digest" "signature-k…
sig=:U2lnbmF0dXJlQnl0ZXNFeGFtcGxlVmFsdWVGb3JEZW1vbnN0cmF0aW9uUHVycG9zZXNPbmx5:
{
"resource": "https://api.example"
}Covered Components
Signature Base
Signature-Key Header
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQrand0In0…"
Signature-Input Header
sig=("@method" "@authority" "@path" "content-type" "content-digest" "signature-key");created=1700000000;alg="ed25519"
{"alg":"EdDSA","kid":"ps-key-1","typ"?:"aa-person+jwt"}{"iss"?:"https://ps.example","dwk"?:"aauth-person.json","aud"?:"https://api.example","sub"?:"8f14e45fceea167a5a36dedd4bea2543","cnf"?:{"jwk"?:},"jti"?:"pt-32d653","iat"?:1776222894,"exp"?:1776226494}