Security and Trust Between Site and Agent|INEMA.CLUB-PRO

Lesson 6 · 18 min

Identifying who arrives: Web Bot Auth and signed agents (IETF draft)

Anyone can write a User-Agent. Web Bot Auth is the IETF proposal for a bot to sign each request with a key published at its own URL. It is still a draft (-00, September 2026). In this lesson you check a signature against the draft's test vector and see on a local server what it proves and what it doesn't.

Start the lesson
Plain metal badge with no lettering on a dark keyboard, next to a network cable, neutral light.

In this lesson you will

  1. 1HTTP Message Signatures (RFC 9421) and what the draft adds
  2. 2The draft's test vector, redone byte by byte
  3. 3Covered components, expiry and replay
  4. 4Identity is not authorization: the policy is still yours

Goal: check a Web Bot Auth signature against the draft's test vector and verify signed requests on a local server, knowing what the signature does not prove.

01From the agent that signs to the site's policy

draft-ietf-webbotauth-httpsig-protocol-00 (September 1, 2026). Click each step.

Click each block in the diagram to see what it does.

IETF group draft (Cloudflare and Google), expires March 5, 2027. Not an RFC.

02The draft's vector, redone

Appendix E.2.1: Ed25519 with the RFC 9421 public test key (B.1.4). Only node:crypto, no packages.

Terminal · vector
cd ~/projetos/formacao-webmcp-seguranca-v72/kit
node scripts/wba.mjs vetor; echo "saída: $?"
Example from the repository
== node v24.13.0 · draft-ietf-webbotauth-httpsig-protocol-00 (01/09/2026)
keyid calculado: poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U · confere
assinatura: RdNFx5Bj6au3YgAMQL/RzmUl… · confere
vetor E.2.1: confere
saída: 0

Ed25519 is deterministic: same key and same base give the same signature. If your implementation reproduces the vector, it builds the signature base the way the draft does. The test key never goes to production (appendix C.12 of the draft).

03Agent signs, origin checks: seven cases

A new key on every run. The origin already has the agent's directory, as the draft allows (§4.4); nothing leaves your machine.

Terminal · demo
cd ~/projetos/formacao-webmcp-seguranca-v72/kit
node scripts/wba.mjs demo; echo "saída: $?"
Example from the repository
== node v24.13.0 · draft-ietf-webbotauth-httpsig-protocol-00 (01/09/2026) · origem http://127.0.0.1:36913
1 · sem assinatura → anônimo: sem assinatura (a política do site decide)
2 · assinado, válido → identificado: https://agente.exemplo (chave gw6T0rIc…)
3 · mesma assinatura em outro caminho → recusado: assinatura não confere
4 · assinatura vencida → recusado: assinatura vencida
5 · chave que a origem não conhece → recusado: chave desconhecida para https://agente.exemplo
6 · replay dentro da validade → identificado: https://agente.exemplo (chave gw6T0rIc…)
7 · assinatura mínima (só @authority) usada em /admin → identificado: https://agente.exemplo (chave gw6T0rIc…)
7/7 casos como esperado · replay dentro da validade: aceito
saída: 0

Cases 6 and 7 are the draft's warning (§5.2): within the validity window, anyone who saw the request can repeat it; and a signature that covers only @authority is valid for any path on the site. That is why: short validity, with @method + @path covered, and the origin can require those components.

04Where this already shows up

1. Cloudflare

Since July 1, 2026, agents signed with Web Bot Auth count as Verified, with a new field: Direct (a single operator) or Intermediary (a service that many users drive).

05Practice

Check and decide.

E16 · Draft vector

3 min

Run the vector block.

Done when: vetor E.2.1: confere and saída: 0.

E17 · Seven cases

10 min

Run the demo block and explain, in one sentence each, why cases 6 and 7 were accepted.

Done when: 7/7 casos como esperado · replay dentro da validade: aceito.

E18 · Your site's policy

15 min

Create politica-bots.md with three lines, one per case, starting with anônimo:, assinado e conhecido: and assinado e desconhecido:, each with what the site does (allow, limit, block, on which pages). The prefixes stay in Portuguese because the check command looks for them.

Done when: grep -c -E "^(anônimo|assinado e conhecido|assinado e desconhecido):" politica-bots.md → 3.

06Lesson quiz

Question 1 of 4

What does a valid Web Bot Auth signature prove?skill

07In three sentences

SignatureProves who holds the URL's key, not intent or permission.
CoverageShort validity, @method and @path covered; replay exists.
PolicyAnonymous, known, and unknown: three rules of yours.

Going further

Previous lessonNext lesson