Un webhook es la forma en que un servicio externo envía eventos a tu servidor. Pero como cualquiera puede enviar una solicitud a esa URL, tienes que comprobar si la solicitud recibida proviene realmente de ese servicio. El método estándar para ello es la firma HMAC.
El emisor y el receptor comparten una clave secreta. El emisor hashea el cuerpo de la solicitud con la clave mediante HMAC-SHA256 y envía la firma en una cabecera. El receptor hashea el mismo cuerpo con la misma clave y compara si ambas firmas coinciden.
Si coinciden, se garantizan dos cosas a la vez. Como solo quien tiene la clave puede generar la firma correcta, se confirma la autenticidad; y como cualquier cambio mínimo en el cuerpo altera la firma, se confirma la integridad. La mayoría de los webhooks, como los de GitHub, Stripe y Slack, usan este método.
Puedes verificarlo directamente en AG HASH. Activa la opción HMAC, introduce la clave compartida y pega el cuerpo de la solicitud: obtendrás el valor HMAC-SHA256. Solo tienes que compararlo con la firma de la cabecera de la solicitud. En una verificación real se recomienda una comparación de tiempo constante para evitar ataques de temporización.