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:
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:
https://browsers.openwaf.dev/.well-known/http-message-signatures-directorySe sirve con el tipo application/http-message-signatures-directory+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:
- Lee
Signature-Agenty comprueba que es"https://browsers.openwaf.dev". - Descarga el directorio de claves (guárdalo en caché; cambia poco) y elige la clave cuyo
kidcoincide conkeyid. - Reconstruye la base de la firma con
@authority(el host de la petición, en minúsculas y sin puerto por defecto), el valor deSignature-Agenty los parámetros deSignature-Input, como describe la RFC 9421, y verifica la firma Ed25519. - Recházala si
expiresya ha pasado o sicreatedestá 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 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: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/settingscon{"web_bot_auth": false}, ejecutaopenwaf-cloud ctl browsers settings --web-bot-auth off --reason "…"o usa la herramienta MCPbrowser_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.