Wire authentication is HTTP Message Signatures (RFC 9421) plus HTTP Signature Keys (draft-hardt-httpbis-signature-key). Every signed request carries Signature-Key, Signature-Input, and Signature. AAuth presents the agent token, or a person token or auth token in its place, in Signature-Key with scheme=jwt. The cnf.jwk in that JWT is the signing key; a stolen JWT without the private key cannot produce a valid signature.
Challenges replace browser redirects. A 401 carries AAuth-Requirement (for example requirement=agent-token, person-token, interaction, or auth-token). AAuth-Capabilities advertises what the resource can do. Subsequent resource-managed calls may present an opaque session token via Authorization: AAuth <token> and/or AAuth-Access. Missions are bound by mission_s256, not by an AAuth-Mission header (draft-11 removed that header). These header names are from the draft; do not invent parallel names.
Well-known documents are discovered with the dwk ('dot well-known') parameter from Signature-Key: aauth-agent.json, aauth-resource.json, aauth-person.json, aauth-access.json at {iss}/.well-known/{dwk}. Resource metadata may declare access_mode (advisory). Draft-11's registry is agent-token, person-token, session-token, and auth-token. The older name aauth-access-token is gone.
JWT types in draft-11: aa-agent+jwt (identity of the agent; sub is the agent identifier; cnf.jwk binds the key; optional ps names the person server; SHOULD NOT live longer than 24 hours), aa-person+jwt (directed identifier of the person at one resource; identifies, does not authorize; MUST NOT exceed one hour), aa-resource+jwt (issued by the resource to describe the access that needs authorizing; aud is the PS or AS that may redeem it; SHOULD NOT exceed five minutes), aa-auth+jwt (the grant; iss is PS or AS; required aud, ps, and a directed sub; no agent identifier and no act; cnf bound to the agent's key; MUST NOT exceed one hour). Implementations MUST check typ and MUST reject aa-person+jwt where an auth token is required.
Person-server endpoints in draft-11 are person_token_endpoint and auth_token_endpoint (renamed from token_endpoint). A resource issues a resource token only after verifying a person token or an auth token; otherwise it answers requirement=person-token. The agent presents a resource token to auth_token_endpoint. Four-party: the PS discovers {aud}/.well-known/aauth-access.json and calls the AS token endpoint. Call chaining uses upstream_token / subagent_token so a sub-agent signs with its own key. Draft-11 removed act: the person server holds the chain. The agent identifier reaches a resource only in agent-identity and resource-managed modes; in the other three, no token the resource reads carries one, and an auth token carries no agent identifier.
Governance is orthogonal to access mode. Missions are natural-language (Markdown) intent, immutable via s256. Permission, audit, and interaction relay through the PS even when the resource is in identity-based mode. R3 (companion draft) replaces coarse scopes with vocabulary operations, including per-call approval.
- typ: aa-agent+jwtfrom spec
- Quoted from draft-11: agent identity JWT. sub is the agent identifier (aauth:local@domain). cnf.jwk is the signing key. Optional ps names the person server. Agent tokens SHOULD NOT live longer than 24 hours.
- typ: aa-auth+jwtfrom spec
- Quoted from draft-11: the grant. Required payload claims include aud (the resource), ps, and a directed sub, plus iss, dwk, jti, iat, exp, and cnf.jwk. It carries no agent identifier and no act. Lifetime MUST NOT exceed 1 hour. Optional scope, account, mission_s256, and tenant; other IANA or OIDC Core §5.1 claims MAY be added. R3 adds its own claims.
- typ: aa-resource+jwtfrom spec
- Quoted from draft-11: issued by the resource; aud is the PS (three-party) or AS (four-party). SHOULD NOT exceed five minutes. Issued only after the resource has verified a person token or an auth token.
- typ: aa-person+jwtfrom spec
- Quoted from draft-11 §7.1 and §13.11: directed person identifier at one resource. Identifies, does not authorize. Implementations MUST reject aa-person+jwt where an auth token is required.
- AAuth-Requirement / AAuth-Access / AAuth-Capabilitiesfrom spec
- Quoted header names from draft-11. Challenges, opaque session presentation, and capability discovery. Not WWW-Authenticate: Bearer. There is no AAuth-Mission header.
- Signature-Key: scheme=jwtfrom spec
- Quoted usage: the JWT (agent, person, or auth token) rides in Signature-Key. Cover the signature-key component in the RFC 9421 signature base so the header cannot be swapped.
- access_mode=agent-token | person-token | session-token | auth-tokenfrom spec
- Quoted from draft-11 resource metadata. Advisory. The older value aauth-access-token is not in this registry. R3 annotates the same modes per operation.
- Authorization: AAuth <session>illustrative
- Illustrative of resource-managed presentation in draft-11 examples. The session token is opaque to the agent; the signature still binds the request. Do not copy example token values from blogs as test vectors.