AAuth Explorer

Message Signing

Signing Mode Comparison

All AAuth signing modes use HTTP Message Signatures (RFC 9421). The difference is what appears in the Signature-Key header — and what the resource learns about who made the request.

Signature-Key Header

Anonymous

No signature

(none — no Signature-Key header)

No demo

Pseudonymous

sig=hwk

sig=hwk;jwk={"kty":"OKP","crv":"Ed25519","x":"<pub>","kid":"k1"}

Live demo

Agent Identity

sig=jwks_uri

sig=jwks_uri;id="http://agent:8001";kid="key-1"

Live demo

Agent Token

sig=jwt

sig=jwt;jwt="eyJhbGciOiJFZERTQSIsInR5cCI6ImFhLWFnZW50K2p3dCJ9…"

Live demo

Capabilities

FeatureAnonymousPseudonymousAgent IdentityAgent Token
Proof of key possession
Agent identifier disclosed to resource
Replay protection (jti claim)
Remote key discovery (JWKS)
Trust levelNoneKey possessionCryptographic identitySigned identity + Person Server
Resource learnsNothingA specific key signed this — identity unknownFull agent identifier + verifiable public key (via JWKS)Agent identity, PS URL, bound signing key, delegation chain

When to use each

Anonymous

Public endpoints, no access control needed

Pseudonymous

Anonymous but accountable access, rate-limiting by key

Agent Identity

Access control by agent identity, replacing API keys

Agent Token

Full PS-AS authorization flows, mission context

Anatomy of an HTTP Message Signature (all modes)

1. Build signature base

"@method": GET
"@authority": resource:8002
"@path": /data
"signature-key": sig=hwk;…
"@signature-params": (…);created=1700000000

2. Sign with Ed25519 private key

Signature-Input: sig=
  ("@method" "@authority"
   "@path" "signature-key")
  ;created=1700000000
  ;alg="ed25519"

3. Attach 3 headers to request

Signature-Key: sig=<scheme>…
Signature-Input: sig=(…)
Signature: sig=:base64url…: