AAuth Explorer
accessPhase 4

Federated Authorization Access (4-party)

The resource has its own access server. The agent 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 AS URL. The PS federates with the AS — sending the resource token and the agent token — and the AS evaluates resource policy and issues the auth token. Only the PS may call the AS token endpoint, which is why a resource token issued to an agent that cannot name a person is one nobody can redeem.

§ Federated Authorization Access (Four-Party)
AgentResourcePerson ServerAccess Server1POST /person {resource} → 2…2002POST /authorize with the pe…3POST resource token to PS →…4PS federates to AS /token5PS returns auth token to ag…6Retry with auth token → 200
POST https://ps.example/person200

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.

1 / 6
speed

Step 1: POST /person {resource} → 200 person_token

Request / response
Token Lifecycle
Person Tokenaa-person+jwt
Resource Tokenaa-resource+jwt
Auth Tokenaa-auth+jwt
Agent Tokenaa-agent+jwt
POSThttps://ps.example/person
Host

ps.example

Content-Type?

application/json

Content-Digest

sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:

Signature-KeyAAuth?

sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQ…

Signature-InputAAuth?

sig=("@method" "@authority" "@path" "content-type" "content-digest" "signature-k…

SignatureAAuth?

sig=:U2lnbmF0dXJlQnl0ZXNFeGFtcGxlVmFsdWVGb3JEZW1vbnN0cmF0aW9uUHVycG9zZXNPbmx5:

Body
{
  "resource": "https://api.example"
}
HTTP Signaturescheme=jwt

Covered Components

@method
@authority
@path
content-type
content-digest
signature-key

Signature Base

"@method": POST
"@authority": ps.example
"@path": /person
"content-type": application/json
"content-digest": sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:
"signature-key": sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQrand0In0…"
"@signature-params": ("@method" "@authority" "@path" "content-type" "content-digest" "signature-key");created=1700000000;alg="ed25519"

Signature-Key Header

sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQrand0In0…"

Signature-Input Header

sig=("@method" "@authority" "@path" "content-type" "content-digest" "signature-key");created=1700000000;alg="ed25519"

Person Tokenaa-person+jwt
Header
{
"alg":"EdDSA",
"kid":"ps-key-1",
"typ"?:"aa-person+jwt"
}
Payload
{
"iss"?:"https://ps.example",
"dwk"?:"aauth-person.json",
"aud"?:"https://api.example",
"sub"?:"8f14e45fceea167a5a36dedd4bea2543",
"cnf"?:{
"jwk"?:
}
,
"jti"?:"pt-32d653",
"iat"?:1776222894,
"exp"?:1776226494
}
sig: cGVyc29uVG9rZW5TaWduYXR1cmVJc3N1