AAuth Explorer
missionsPhase 10

Mission Context at a Resource

How a mission reaches a resource in -11: the agent names the mission when it asks its PS for a person token, the PS stamps mission_s256 into that token, the resource copies it into the resource token it issues, and the issuer copies it into the auth token. There is no AAuth-Mission header — the mission is never agent-asserted, and a resource reads it only from a PS-issued token.

§ Mission Context at Resources
AgentResourcePerson ServerAccess Server1POST /person {resource, mis…2002POST /authorize with the mi…3POST resource token to PS /…4PS → AS federation → auth t…5PS → agent response (auth_t…6GET /data with the auth tok…
POST https://ps.example/person200

The agent names the mission when it asks for a person token. This is where a mission enters the token chain in -11.

The PS MUST verify the mission exists, is active and belongs to this agent, and MUST reject the request otherwise.

The issued token carries mission_s256 and MUST NOT outlive the mission's expires_at.

A person token is scoped to one resource and one mission, so an agent working across several of either holds one per combination.

The agent may already hold this token: a mission proposal that named `resources` gets one back per approved resource in the approval response.

1 / 6
speed

Step 1: POST /person {resource, mission_s256} → mission-scoped person token

Request / response
Token Lifecycle
Person Tokenaa-person+jwt
Resource Tokenaa-resource+jwt
Auth Tokenaa-auth+jwt
Mission Context

Description (Markdown)

# Analyze Q2 Customer Feedback

Read customer feedback records and produce a summary report with sentiment analysis and key themes.

Blob Members

approverhttps://ps.example
agentaauth:local@agent.example
approved_at2026-04-14T17:14:54Z
expires_at2026-05-14T17:14:54Z
approved_resourceshttps://api.example

The blob is what the digest covers. approver lives here and nowhere else — no token carries it.

Mission Identifier

mission (base64url)

eyJhcHByb3ZlciI6Imh0dHBzOi8vcHMuZXhhbXBsZSIsImFnZW50IjoiYWF1dGg6bG9jYWxAYWdlbnQuZXhhbXBsZSIsImFwcHJvdmVkX2F0IjoiMjAyNi0wNC0xNFQxNzoxNDo1NFoiLCJleHBpcmVzX2F0IjoiMjAyNi0wNS0xNFQxNzoxNDo1NFoiLCJkZXNjcmlwdGlvbiI6IiMgQW5hbHl6ZSBRMiBDdXN0b21lciBGZWVkYmFja1xuXG5SZWFkIGN1c3RvbWVyIGZlZWRiYWNrIHJlY29yZHMgYW5kIHByb2R1Y2UgYSBzdW1tYXJ5IHJlcG9ydCB3aXRoIHNlbnRpbWVudCBhbmFseXNpcyBhbmQga2V5IHRoZW1lcy4iLCJhcHByb3ZlZF90b29scyI6W3sibmFtZSI6IkZlZWRiYWNrUmVhZGVyIiwiZGVzY3JpcHRpb24iOiJSZWFkIGN1c3RvbWVyIGZlZWRiYWNrIHJlY29yZHMifSx7Im5hbWUiOiJSZXBvcnRXcml0ZXIiLCJkZXNjcmlwdGlvbiI6IldyaXRlIHRoZSBzdW1tYXJ5IHJlcG9ydCB0byB0aGUgc2hhcmVkIGRyaXZlIn1dLCJhcHByb3ZlZF9yZXNvdXJjZXMiOlsiaHR0cHM6Ly9hcGkuZXhhbXBsZSJdfQ

s256

7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg

s256 is not a blob member. It is BASE64URL(SHA-256()) of the bytes mission decodes to, returned alongside it so the agent can verify the digest covers an unambiguous byte sequence. It travels as the mission_s256 claim of person, resource and auth tokens.

Approved Tools

FeedbackReader

Read customer feedback records

ReportWriter

Write the summary report to the shared drive

PS Capabilities

interactionclarification
s256 Chain
Mission blob bytesPS serializes the approved mission once and persists those exact bytes

7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg

s256 = BASE64URL(SHA-256(bytes)). The PS returns the same bytes base64url-encoded as the `mission` member, so the agent can recompute the digest itself.

mission_s256 in the person tokenPS stamps it when the agent names the mission at the person token endpoint

7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg

The agent asks for a person token with mission_s256; the PS verifies the mission exists, is active and belongs to this agent, then puts the value in the token.

mission_s256 in the resource tokenResource copies it out of the person token it verified

7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg

REQUIRED when the person token carried one — a resource MUST NOT omit it. person_token_jti names the exact token it was copied from.

mission_s256 in the auth tokenIssuer copies it from the resource token

7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg

The resource reads the mission only here. It never arrives as a header and is never agent-asserted.

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",
  "mission_s256": "7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg"
}
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"?:
}
,
"mission_s256"?:"7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg",
"jti"?:"pt-32d653",
"iat"?:1776222894,
"exp"?:1776226494
}
sig: cGVyc29uVG9rZW5TaWduYXR1cmVJc3N1