Interaction Chaining (202 Bubbles Back)
R1 calls R2, but R2’s AS requires user consent. Instead of blocking, R1 returns its own 202 to the original agent, with an interaction URL that redirects through R1 to AS2. The agent polls R1; R1 polls AS2 in parallel. Once the user consents at AS2, R1 gets the auth token, completes the R2 call, and the agent’s next poll returns the combined result.
Agent accesses R1 using its AS1-issued auth token (sig=jwt).
R1 needs data from R2, but R2’s AS requires user consent.
R1 bubbles the 202 back: returns its own pending URL + interaction URL to the agent.
The agent’s interaction URL points to R1 (/interact), which will redirect to AS2.
Step 1: Agent → R1 with auth token → R1 bubbles 202
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFzMS1rZXktMSIsInR5cCI6ImFhLWF1dGgrand…
sig=("@method" "@authority" "@path" "signature-key");created=1700000000;alg="ed2…
sig=:ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGR…
Covered Components
Signature Base
Signature-Key Header
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFzMS1rZXktMSIsInR5cCI6ImFhLWF1dGgrand0In0…"
Signature-Input Header
sig=("@method" "@authority" "@path" "signature-key");created=1700000000;alg="ed25519"
{"alg":"EdDSA","kid":"as1-key-1","typ"?:"aa-auth+jwt"}{"iss"?:"https://as.example","aud"?:"https://api.example","dwk"?:"aauth-access.json","jti"?:"34449e73-d2d2-4e45-80d2-01b4b198e025","cnf"?:{"jwk"?:},"iat"?:1776222894,"exp"?:1776226494,"agent"?:"aauth:local@agent.example","act"?:{"sub"?:"aauth:local@agent.example"},"scope"?:"read"}