Todo lo que vale la pena saber, nada que no lo sea.
Cómo se construye la firma
Una construcción habitual forma la cadena canónica como `${timestamp}.${requestBody}`, calcula `HMAC-SHA256(canonical, secret)`, la codifica en hexadecimal y envía el resumen y la marca de tiempo en una cabecera de firma. Incluir la marca de tiempo dentro de la carga firmada evita los ataques de repetición: su endpoint debe rechazar los webhooks con más de 5 minutos de antigüedad. Los nombres de las cabeceras y el formato canónico exacto varían entre plataformas, así que confírmelos con su proveedor antes de escribir el código de verificación.
¿Por qué usar firmas HMAC y no RSA?
HMAC es simétrico (ambas partes comparten un secreto), lo que significa que la firma y la verificación son aproximadamente 10 000 veces más rápidas que RSA-2048. Para la distribución de webhooks, donde un único SMSC puede emitir 50 000 DLR por segundo, la firma RSA consume muchos más recursos de CPU. HMAC-SHA256 en hardware moderno se ejecuta en microsegundos de un solo dígito. La contrapartida es que cualquiera que tenga el secreto puede firmar, así que el secreto debe compartirse solo entre la plataforma y su entorno, guardarse como cualquier otra credencial y poder rotarse bajo demanda.
Problemas con la verificación
Tres errores comunes. Comparar cadenas con `==` en lugar de una comparación de tiempo constante (ataque de temporización: use `crypto.timingSafeEqual`). Validar la firma después de analizar el cuerpo en formato JSON (debe verificar los bytes sin procesar, no una representación serializada; la reordenación de JSON rompe el hash). Olvidar la ventana de protección contra la repetición de la marca de tiempo.
Más allá de HMAC
En entornos regulados (banca, sanidad), algunas plataformas también admiten la entrega de webhooks por mTLS: el remitente presenta un certificado de cliente que su balanceador de carga valida antes de que la solicitud llegue a la aplicación. Es más robusto que HMAC porque vincula la entrega a una clave de hardware, pero solo compensa su coste en cargas de trabajo realmente sensibles. Para la mayoría de las integraciones, HMAC-SHA256 sobre HTTPS es la respuesta correcta.