Calcula la firma con el secreto de tu endpoint y compárala en tiempo constante antes de procesar el cuerpo. Cuando rotas el secreto, el anterior sigue siendo válido durante veinticuatro horas, así que puedes desplegar el cambio cuando te convenga.
// Verify a webhook signature (Node.js)
import crypto from 'crypto';
function verifyWebhook(payload, signatureHeader, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signatureHeader),
);
}