Repository navigation
Description
Problem
An AAMP agent identifies itself by a URL in the request body, and nothing proves it controls that URL. Postindustria, an IAB Tech Lab member, asks AAMP to adopt IETF Web Bot Auth as its one agent identity and message-signing profile.
The seller reference agent's registry lookup sends the buyer's self-asserted agent_url to the Agent Registry. The result caps the price tier (pricing rules), and an anonymous caller picks its own tier (seller-agent #114). OpenProposal § 4.1 says of assent: "Signature scheme is WS1", and WS1 is defined nowhere (#36).
Proposal
Adopt draft-ietf-webbotauth-httpsig-protocol-00 as that profile, in one hub document. Cloudflare, Akamai, AWS WAF, and Vercel verify Web Bot Auth. Our PR on what is signed adds an OpenProposal profile of it, § 2.8, which the hub profile replaces.
Three questions stay apart:
- Which origin sent this message? This profile. An agent is its
httpsorigin, with Ed25519 keys at/.well-known/http-message-signatures-directory, eachkidits RFC 7638 thumbprint. Signed requests and responses carry an HTTP Message Signature coveringSignature-Agentand, for a body,Content-Digest. - Who may act for a party? Not this profile. A mandate does, such as @authbound1's authorization evidence (OpenProposal #57), under the AAMP authority document (provisional name). That document defines its signed form; the profile says where the signer's key is.
- Which legal entity agreed to which bytes? The child specification's record, such as OpenProposal's
assent[]entries. As optional evidence, a party keeps the signed message as received and the directory bytes it verified against.
Each child specification carries one sentence:
Agent identity and message authentication are defined by the AAMP agent identity and signing profile [version].
In OpenProposal, our parties PR keeps these three layers apart.
Conditions
All six must hold.
- One profile, referenced, not restated. The hub names the repositories it binds, including
iab-agentic-primitives. - The registry attests; it is not the identity root.
- Authority comes from a mandate the principal publishes or signs, never from the agent's signature or
kidstructure. - OpenProposal owns only the record: the binding record,
record_digest, theassent[]entry and its attribution, and what each party keeps (binding-record filing). - One key format. Every AAMP key, for any purpose, sits in the signing origin's directory, the only key mechanism beside ads.cert's DNS keys.
- Pinned and maintained: a named revision and pin owner.
Ask
- Confirm whether WS1 is this work and where it lives, closing OpenProposal #36.
- Charter the profile and agree on the six conditions before child repositories ship identity code. The hub README says architectural proposals start here.
- Apply our parties PR's split across the primitives: a party's
domainis its identifier, and registry-issued ids attest it (seller identity filing).
We will contribute text and conformance vectors.
Open questions for the working group
- Answered by @aeoess. Where should the authority record be specified? In an AAMP document beside this signing profile, or in the future draft or workstream that @authbound1's authorization evidence request (OpenProposal #57) asks for? @aeoess would put the authority rules in a separate AAMP document linked to this profile. That document would define the limits, the revocation checks, and how commitments consume a cap. Their delegation cases belong there, and our proposed answers on OpenProposal #57 address them.
Background: Agent identity without inventing anything: Web Bot Auth in five minutes.
Details: AAMP agent identity and signing profile: full rationale and examples.
Revised 2026-11-03: Follows our PR on what is signed: one key format, signed responses, and the kept message as evidence. Ask 3 drops the credential-scheme registry.
Analyzed and generated with the help of Claude, fully reviewed by me.
Activity
aeoess commentedon Oct 24, 2026
Konstantin, I agree with checking authority before the seller accepts a commitment, as you described in OpenProposal #57. I think we also need to cover what happens when authority passes through several agents.
Three cases I'd like to clarify:
Should the expected behavior for these be part of this profile, or of the authority record #57 asks for?
I've worked on similar cases in the Agent Passport System and would be happy to contribute test vectors once the group agrees on the expected results.
KonstantinMirin commentedon Oct 25, 2026
Thank you, @aeoess. These are good cases, but they are about authority, not identity, and we ask to keep the two apart.
The profile answers one question: which origin signed a request or a record. Whether that origin may spend $50,000 for the advertiser is a different question. A signature from an agent whose mandate was revoked still proves who signed, and says nothing about the mandate.
This narrows our own proposal. Its third question, "May this origin act for this principal?", and our reply on authorization evidence (OpenProposal #57) put the authority record inside the profile. The profile should only verify that each record in a delegation chain was signed by the origin it names. What the record means belongs to the authority record that @authbound1's request (OpenProposal #57) asks for: how limits combine down a chain, when a revocation applies, and whether a cap is a total. We answered your three cases there, in our reply on OpenProposal #57.
Open question:
Revised 2026-10-26: @aeoess answered open question 1, and the issue body links their answer.
Analyzed and generated with the help of Claude, fully reviewed by me.