# Web Bot Auth

> OpenWAF Browsers firma cada petición con Web Bot Auth para que los sitios comprueben que les visita un agente. Cómo funciona, cómo verificarlo y cómo desactivarlo.

Web Bot Auth es un borrador del IETF que permite a un bot o a un agente demostrar quién es con una firma criptográfica en cada petición, en lugar de un User-Agent que cualquiera puede copiar. Se apoya en HTTP Message Signatures (RFC 9421). OpenWAF Browsers firma las peticiones de cada navegador **por defecto**.

## Qué lleva una petición firmada

Las cabeceras propias de Chrome y su User-Agent no cambian. Se añaden tres cabeceras:

```http
Signature-Agent: "https://browsers.openwaf.dev"
Signature-Input: sig1=("@authority" "signature-agent");created=1761732000;keyid="…";alg="ed25519";expires=1761732300;nonce="…";tag="web-bot-auth"
Signature: sig1=:…:
```

| Cabecera | Significado |
|---|---|
| `Signature-Agent` | Quién firma: el origen `https://browsers.openwaf.dev`, donde se publica la clave pública. |
| `Signature-Input` | Qué se firma y cómo: el host de la petición (`@authority`) y la cabecera `Signature-Agent`, una clave Ed25519 (`alg="ed25519"`), el id de la clave (su huella JWK según RFC 7638), la hora de creación, una caducidad 5 minutos después, un nonce aleatorio y la etiqueta `web-bot-auth`. |
| `Signature` | La firma Ed25519 sobre esos componentes. |

Las cabeceras se añaden dentro del navegador a cada petición HTTP y HTTPS que hace: cargas de página, frames, subrecursos, `fetch` y XHR. Las conexiones WebSocket y las peticiones internas de los service workers pueden no llevarlas.

## Directorio de claves

La clave pública se publica como un conjunto de claves JSON Web Key en:

```text
https://browsers.openwaf.dev/.well-known/http-message-signatures-directory
```

Se sirve con el tipo `application/http-message-signatures-directory+json`:

```json
{"keys": [{"kty": "OKP", "crv": "Ed25519", "x": "…", "kid": "…"}]}
```

El `kid` coincide con `keyid` en `Signature-Input`.

## Verificarlo en tu sitio

Un sitio que quiera reconocer OpenWAF Browsers, para permitirlo, limitarlo aparte o simplemente contarlo:

1. Lee `Signature-Agent` y comprueba que es `"https://browsers.openwaf.dev"`.
2. Descarga el directorio de claves (guárdalo en caché; cambia poco) y elige la clave cuyo `kid` coincide con `keyid`.
3. Reconstruye la base de la firma con `@authority` (el host de la petición, en minúsculas y sin puerto por defecto), el valor de `Signature-Agent` y los parámetros de `Signature-Input`, como describe la RFC 9421, y verifica la firma Ed25519.
4. Recházala si `expires` ya ha pasado o si `created` está demasiado en el futuro. Si quieres, recuerda los nonces para rechazar repeticiones.


Las bibliotecas que implementan la verificación de Web Bot Auth hacen los pasos 2 a 4 por ti. Los sitios detrás de OpenWAF ya comprueban firmas de Web Bot Auth como uno de los métodos de [verificación de bots](https://developers.openwaf.dev/es/ai-crawl-control/verification/) del control de rastreadores IA.

Una firma válida dice que la petición viene de un navegador de OpenWAF Browsers. No dice qué cliente lo usa, y no significa que la petición sea bienvenida: qué hacer con ella lo decides tú.

## Desactivarlo

Te recomendamos dejarlo activado. Una petición firmada es honesta sobre ser automática, así que los sitios pueden dejarla pasar a propósito en vez de adivinar, y un sitio que la bloquea ha tomado una decisión clara que conviene respetar. Algunos sitios tratarán mejor a los agentes firmados que al tráfico anónimo.

Si tienes un motivo para desactivarlo:

- **Para un navegador:** arráncalo con `"webBotAuth": false`:

  ```sh
  curl -sS -X POST https://browsers.openwaf.dev/v1/browsers \
    -H "X-API-Key: $OPENWAF_BROWSERS_KEY" -H "Content-Type: application/json" \
    -d '{"webBotAuth": false}'
  ```

- **Como valor por defecto de la organización:** un administrador desactiva **Web Bot Auth** en **Navegadores → Ajustes**, envía `PATCH /v1/orgs/{org}/browsers/settings` con `{"web_bot_auth": false}`, ejecuta `openwaf-cloud ctl browsers settings --web-bot-auth off --reason "…"` o usa la herramienta MCP `browser_settings`. Los navegadores nuevos van entonces sin firmar, salvo que pidan `"webBotAuth": true`.

Quitar la firma no vuelve sigiloso a un navegador: sigue siendo Chrome sin modificar con su propio User-Agent, desde las direcciones de OpenWAF. Mira [qué no es](https://developers.openwaf.dev/es/browsers/what-it-is-not/).
