Flow · p2p
Peer-to-peer: AAuth identity-based access
No authorization server in the path. The agent signs the request; the resource decides from cryptographic identity. This is the 'p2p' that sits next to AAuth.
Use the hop list beside the stage, or the phase labels, to jump. Every hop has Now, Why, the RFC, and chips — none are skipped.
Actors
Agent · Agent provider · Resource
Sequence
Animated sequence · p2p
AAuth — How does an agent prove who it is when there is no authorization server?
Peer-to-peer: AAuth identity-based access
No authorization server in the path. The agent signs the request; the resource decides from cryptographic identity. This is the 'p2p' that sits next to AAuth.
Now · 1/6· Discover· AAuth draftYou are here
Agent provider→Agent·Issues aa-agent+jwt bound to the agent's signing key
typ aa-agent+jwt: sub is the agent identifier, cnf binds the signing key. Optional ps is unused in this mode.
Why The provider attests the key. It is not an OAuth AS and mints no Bearer access token.
A wax-sealed ID card for the agent — not a photocopied pass.
- typ: aa-agent+jwt from the spec
- cnf from the spec
- iss / dwk from the spec
Solid = from the spec
The resource learns who the agent is, not necessarily which human it serves. For a person identifier without a grant, use draft-11 person identity. For a grant, use PS authorization. Individual draft — pin draft-11. Five modes, not draft-10's four.
Transcript
- 1
DiscoverAgent provider→AgentAAuth draft
Issues aa-agent+jwt bound to the agent's signing key
typ aa-agent+jwt: sub is the agent identifier, cnf binds the signing key. Optional ps is unused in this mode.
Why The provider attests the key. It is not an OAuth AS and mints no Bearer access token.
A wax-sealed ID card for the agent — not a photocopied pass.
- typ: aa-agent+jwt
- cnf
- iss / dwk
- 2
DiscoverAgent provider→Agent providerAAuth draft
Publishes JWKS at {iss}/.well-known/{dwk}
The provider publishes aauth-agent.json (dwk) and JWKS. This is not an OAuth token endpoint.
Why Do not skip this. A stranger cannot verify a first request unless the provider hosts keys at the well-known document named by dwk.
Hang the signet on the wall where any door can look it up.
- iss
- dwk
- JWKS
- 3
ProveAgent→ResourceRFC 9421
First signed HTTP request: Signature-Key (jwt) + Signature-Input + Signature
The agent authenticates with HTTP Message Signatures. Signature-Key carries the JWT (scheme=jwt). This is the first request — the resource has never seen this agent.
Why A stranger can verify the caller without an AS-issued Bearer token. Cover signature-key in the signature base. There is no authorization server on this hop.
Wax seal on the envelope — the key, not a photocopied pass.
- Signature-Key
- Signature-Input
- Signature
- typ: aa-agent+jwt
- 4
ProveResource→Agent providerAAuth draft
Fetches JWKS via iss + dwk well-known document
Resolve {iss}/.well-known/{dwk} and fetch JWKS.
Why Do not skip JWKS fetch. The resource verifies the seal against the provider's published keys. That fetch is a trust-boundary crossing, not an OAuth token request.
Check the wax against the published signet.
- iss
- dwk
- JWKS
- 5
ProveResource→ResourceRFC 9421
Verifies RFC 9421 signature, typ, exp, and cnf.jwk
The resource checks the signature base (including signature-key), typ aa-agent+jwt, exp, and that cnf matches the key that signed.
Why Signature, JWT type, expiry, and key binding are separate checks. Missing signature → 401 AAuth-Requirement: agent-token.
Feel the wax, read the card type, check the date, match the signet.
- typ: aa-agent+jwt
- cnf
- exp
- AAuth-Requirement
- 6
CallResource→AgentAAuth draft
Allows or denies based on local policy for that agent identifier
The resource applies local policy to the agent identifier. access_mode=agent-token on resource metadata is advisory.
Why Identity-based access answers which agent called — not which human it serves. No token exchange, no person server, no OAuth redirect.
The door knows the seal. It does not yet know who sent the messenger.
No token exchange, no person server, no OAuth redirect. 401 requirement=agent-token if the signature was missing.
- access_mode=agent-token
- local policy
Caveats
The resource learns who the agent is, not necessarily which human it serves. For a person identifier without a grant, use draft-11 person identity. For a grant, use PS authorization. Individual draft — pin draft-11. Five modes, not draft-10's four.
Why this hop looks this way
This is the AAuth meaning of p2p: agent and resource, no authorization server, no person server. It is as complete as AAuth two-party for the identity question and weaker for the user question.
It is not A2A (no Agent Card, no tasks). It is not did:peer (the identifier is published at a well-known URL so a stranger can verify a first request). It is not OAuth client-credentials (no client_id, no Bearer access token).
Wire: Signature-Key (scheme=jwt, aa-agent+jwt) + RFC 9421 Signature-Input/Signature. Cover signature-key in the signature base. Resource metadata access_mode=agent-token is advisory.