Firmas de Webhook
Para ayudarte a proteger tus manejadores de webhook para que solo respondan a eventos enviados desde Trophy y no a atacantes maliciosos, Trophy incluye una firma de webhook con cada evento.
Esta firma se envía en el encabezado X-Trophy-Signature y es un hash codificado en base64 de la carga útil de la solicitud, hasheado utilizando un secreto de webhook seguro proporcionado por Trophy.
Secretos de Webhook
Cada webhook que configuras en Trophy tiene un secreto de webhook único al que puedes acceder desde la página de webhooks en el panel de Trophy.
Asegúrate de almacenar tu secreto de webhook en una variable de entorno segura
y no lo incluyas en el control de versiones.
Protección de Manejadores de Webhook
Para validar que los eventos que recibe tu manejador de webhook realmente provienen de Trophy, necesitas crear tu propio hash utilizando tu secreto de webhook seguro y compararlo con la firma de webhook en el encabezado X-Trophy-Signature.
Una vez que tengas tu secreto de webhook, estás listo para comenzar a validar eventos. Aquí tienes un ejemplo en Node.js:
Validating Webhook Events
// Extract X-Trophy-Signature header from the request
const hmacHeader = request.headers.get("X-Trophy-Signature");
// Create a hash based on the parsed body
const hash = crypto
.createHmac("sha256", process.env.TROPHY_WEBHOOK_SECRET as string)
.update(await request.text())
.digest("base64");
// Compare the created hash with the value of the X-Trophy-Signature header
if (hash === hmacHeader) {
console.log("Webhook is originating from Trophy");
// Request validated, continue processing
} else {
console.log("Signature is invalid, rejected");
// Request is not from Trophy, reject with 4XX status
}
Si tu manejador detecta una solicitud que no se originó en Trophy, es
importante rechazar la solicitud lo antes posible con un código de estado 4XX.
Obtener Soporte
¿Quieres ponerte en contacto con el equipo de Trophy? Comunícate con nosotros por correo electrónico. ¡Estamos aquí para ayudarte!