Skip to content
Sulayman Bowles / Project Delta

Web Bot Auth for Verifying AI Crawlers

A published user-agent is a label. A valid message signature can bind a request to a registered key—within a specific draft, verifier, and replay model.

A Web Bot Auth guide to HTTP message signatures, key directories, Signature-Agent, replay limits, Cloudflare verification, and safe allow rules.

01 / Problem

User-agent identity is trivially copyable

A server log that says GPTBot, Googlebot, or another published name proves only that the client sent that string. IP validation and reverse DNS can improve confidence when a provider publishes stable infrastructure, but proxies, intermediaries, and agentic requests complicate the model. Web Bot Auth applies HTTP Message Signatures so a verifier can test possession of a registered private key.

Verification answers a bounded question: whether the request signature validates under the registered key and supported protocol. It does not certify the truth of every payload, authorize the requested action, or prove the ultimate human or model purpose. Authentication belongs before authorization, not instead of it.

02 / Protocol

Three headers connect the request to a key directory

Cloudflare’s implementation expects a Signature-Agent structured string pointing to an HTTPS key directory, Signature-Input describing the signed components and parameters, and Signature carrying the cryptographic value. The signature-agent component must itself be included in the covered component list. Cloudflare currently accepts registered Ed25519 keys from the directory.

Choose stable components such as @authority and the signature-agent field, then add method, path, or other components according to the authorization risk. Unsupported components or serialization parameters cause verification failure. Implementation code must target the verifier’s documented draft rather than assuming every HTTP Message Signatures example is interchangeable.

Figure 01 / verification chainEach layer supplies evidence for the next; none should be skipped by an allow rule.
LayerEvidenceFailure
Agent headerHTTPS key-directory pointerMalformed or unknown URI
Signature inputCovered components and timeUnsupported or incomplete set
SignatureEd25519 verificationInvalid key or bytes
RegistrationApproved bot identityUnregistered signer
AuthorizationLocal policy permits actionValid but unauthorized

03 / Replay

Freshness limits matter as much as signature validity

A captured signed request may be replayed if the verifier accepts the same signature later. Cloudflare recommends short expiration windows and notes that nonce validation is not currently backed by a seen-nonce database. Treat created, expires, authority, method, and target components as part of the threat model, not optional decoration.

A minute-long expiry may be appropriate for ordinary crawl requests, but clock skew and queueing need measured tolerance. Do not sign mutable intermediary-controlled headers unless the delivery path preserves them exactly. When body integrity matters, a content digest can help only if intermediaries will not transform the representation.

04 / Deployment

Verify first, then authorize the narrow route

Register the key directory and bot metadata, test signed requests against the documented validation endpoint, and log the exact verification result. Cloudflare describes 200 for known valid keys, 401 for correctly formatted but unknown or failed identities, and 400 for malformed requests in its test flow. Keep test and production keys separate.

At the origin or edge, create an allow decision only after verification and only for the paths, methods, and rates the crawler needs. Do not bypass authentication, administrative routes, write endpoints, or rate controls. Preserve an emergency revocation path for compromised keys and rotate keys without a gap in the published directory.

05 / Observability

Log verification outcomes without leaking key material

Record verifier version, registered agent, key identifier, signature time, expiry, covered-component set, route, decision, and failure class. Do not log private keys, raw authorization data, or unnecessary signed bodies. Aggregate invalid signatures separately from unknown agents and expired requests so an implementation bug is not mislabeled as hostile traffic.

Web Bot Auth is a meaningful improvement over name matching, especially as signed agents become common. It is still an evolving ecosystem built from standards and implementation profiles. Maintain protocol fixtures, rotate keys, follow verifier updates, and keep fallbacks explicit. A secure system knows exactly what evidence caused an allow decision.

Continue through the evidence systemThe article links to narrower Project Delta references for implementation detail and claim boundaries.
  1. 01
    Cloudflare AI Crawl Control: Policy Before the Toggle

    A Cloudflare AI Crawl Control guide covering crawler activity, detection quality, robots violations, allow and block actions, WAF order, and verification.

  2. 02
    OAI-SearchBot vs GPTBot vs ChatGPT-User

    An OAI-SearchBot vs GPTBot comparison explaining ChatGPT-User, robots.txt policies, training boundaries, verification, and common mistakes.

  3. 03
    AI Crawler Reference

    AI crawler robots.txt guides for OAI-SearchBot, GPTBot, ChatGPT-User, and Google-Extended, with distinct product roles, controls, and claim limits.

Primary referencesOfficial and standards sources that bound the article’s claims, with the public review date preserved.
  1. 01
    Cloudflare: Web Bot Auth

    Key-directory registration, supported signature headers and components, current draft compatibility, testing endpoint behavior, and implementation limitations.

    Checked 2026-07-20
  2. 02
    Cloudflare: Verified bots

    The honesty, identity, behavior, rate, robots, and non-abuse requirements attached to Cloudflare’s verified classification.

    Checked 2026-07-20
  3. 03
    RFC 9421: HTTP Message Signatures

    The standardized signature inputs, components, algorithms, verification model, and security considerations underlying signed HTTP requests.

    Checked 2026-07-20