---
title: "Verify Web Bot Auth signatures before you · Agent Wranglers"
url: https://agentwranglers.se/playbook/agents-as-users/identifying-agents/verify-web-bot-auth
id: AGT-1
level: Recommended
updated: 2026-10-22
tokens: 1142
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Verify Web Bot Auth signatures before you trust an agent

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Identifying agents](https://agentwranglers.se/playbook/agents-as-users/identifying-agents.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-22.

- ID: AGT-1
- Level: Recommended
- Chapter: [Identifying agents](https://agentwranglers.se/playbook/agents-as-users/identifying-agents.md)
- Rule: Treat a request as coming from a named agent operator only when its Web Bot Auth signature verifies. Check the tag, the time window, the covered fields and the key.
- Check: A test sends four requests with a known test key. The valid one is accepted. One with an `expires` in the past, one with a different tag, and one that does not cover `signature-agent` are each treated as unsigned.
- How: Web Bot Auth signs requests with HTTP Message Signatures. The `Signature-Agent` header names the operator's key directory, and `Signature-Input` lists what the signature covers. Accept a signature only with `tag="web-bot-auth"`, `created` in the past and `expires` in the future. It must cover `@authority` or `@target-uri`, plus the `signature-agent` field. Look the key up by its `keyid`, a JWK thumbprint, in the directory that `Signature-Agent` names. The operator is the origin of that directory, never the user agent string. Fetch the directory as [Fetch key directories with network limits](https://agentwranglers.se/playbook/agents-as-users/identifying-agents/safe-key-directory-fetch.md) says. Some CDNs and firewalls verify these signatures for you and pass on a label, so trust that label only from your own edge. Web Bot Auth became an IETF working group draft in September 2026, so expect changes. The general rule is [Verify who an agent is](https://agentwranglers.se/playbook/adversarial-testing/hostile-agents-and-bots/verify-agent-identity.md), and the signing side is [Sign your bot's requests](https://agentwranglers.se/playbook/website/ready-for-ai-agents/web-bot-auth.md).

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
const REQUIRED_TAG = 'web-bot-auth';

export function acceptableSignatureParams(params, nowSeconds = Date.now() / 1000) {
  const covers = new Set(params.components);
  return params.tag === REQUIRED_TAG
    && params.created <= nowSeconds && params.expires > nowSeconds
    && (covers.has('@authority') || covers.has('@target-uri'))
    && [...covers].some(component => component.startsWith('"signature-agent"'));
}
```

### Python example

```python
REQUIRED_TAG = "web-bot-auth"

def acceptable_signature_params(params: dict, now_seconds: float) -> bool:
    covers = set(params["components"])
    return (
        params["tag"] == REQUIRED_TAG
        and params["created"] <= now_seconds < params["expires"]
        and ("@authority" in covers or "@target-uri" in covers)
        and any(component.startswith('"signature-agent"') for component in covers)
    )
```

## Sources

- [RFC 9421 (HTTP Message Signatures)](https://www.rfc-editor.org/rfc/rfc9421)
- [IETF draft (Web Bot Auth HTTP signatures protocol)](https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/)

## Related rules

- AGT-2 [Fetch key directories with network limits](https://agentwranglers.se/playbook/agents-as-users/identifying-agents/safe-key-directory-fetch.md) in Agents as users
- SEC-98 [Verify who an agent is](https://agentwranglers.se/playbook/adversarial-testing/hostile-agents-and-bots/verify-agent-identity.md) in Adversarial testing
- WEB-191 [Sign your bot's requests](https://agentwranglers.se/playbook/website/ready-for-ai-agents/web-bot-auth.md) in Website

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/agents-as-users/identifying-agents/verify-web-bot-auth">Agent Wranglers agents as users playbook</a>`. In code you write, add a comment next to it with the same link.

- Next: [Fetch key directories with network limits](https://agentwranglers.se/playbook/agents-as-users/identifying-agents/safe-key-directory-fetch.md)
- [Identifying agents](https://agentwranglers.se/playbook/agents-as-users/identifying-agents.md)
