Verificación de mensajes
Verificación de mensajes
Como patrón de seguridad, se firma cada webhook y sus metadatos con una clave única para cada endpoint. Esta firma se puede utilizar para verificar que el webhook proviene realmente de OrkestaPay, y sólo procesarlo si el origen es válido. Cada llamada de webhook incluye tres cabeceras con información adicional que se utilizan para la verificación:
- svix-id: Identificador único del mensaje del webhook. Este identificador es único para todos los mensajes.
- svix-signature: Firma codificada en Base64.
- svix-timestamp: Marca de tiempo Epoch.
Para realizar la validación es necesario del la firma secreta.
Firma del webhook
Cada notificación que se envía se firma como medida de seguridad. La firma del Webhook permite al comercio validar el origen de las notificaciones y procesar las notificaciones con un origen válido, para realizar la validación es necesario la firma secreta de tu endpoint.
Una vez configurado tu endpoint puedes obtener la firma secreta, en la sección de endpoints y selecciona tu endpoint configurado.
Puedes consultar la documentación oficial de nuestro proveedor dando clic aquí, que cuenta con librerías en los lenguajes más populares de programación.
Ejemplo de verificación
El siguiente ejemplo de verificación es realizado con NodeJS.
Se requiere instalar la librería de Svix:
npm install svix
// Or
yarn add svix
import { Webhook } from "svix";
const secret = "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw";
// Las cabeceras son enviadas por cada notificación
const headers = {
"svix-id": "msg_p5jXN8AQM9LWM0D4loKWxJek",
"svix-timestamp": "1614265330",
"svix-signature": "v1,g0hM9SsE+OTPJTGt/tmIKtSyZlE3uFJELVlNIOLJ1OE=",
};
const payload = '{"algorithm":"RSA","encryptedData":"z7YjgSyx0VzXlDGNC4fjjk1IC69qKN8rRLSItUDY9WXQFgr98ORq/ieJunuCucwk6hmrM9CZAlszE/LD/qSeUtOUcv28ngjobZ5UD+zDqLOeqC5KqHtP0I48L1wC+epXMntsd/KxslWh0+s076K8hZFg7dgJOy2HS46tytNX7AAbEzuQouQo3R0OGV//asG3POej3VQTyRTzKVoRDOO7cVGgNenI4AjfAjUJu+gcOzHqrAj5qr92TEZOZf45+pAk6p5nrfL42NBThO8GB3pXQr2/k74HpkFmVXcZJRB7RDSGfhsFCsnDFZ4N4mHQJWc1/u00z7oGzymPSDGQBEUjzIwGbjBLLDHxdCGKWuwdUq5hAH8Nk55HGOycou7ciBBXOl8E3iTaSxldqOkFLpvkMQ6G2i6dH/1ERKxx61LtQveetkGGMPaLRlsgrUGJNftuKNGEMMQgxn4JykppxHqW3KBlzNhpFUn3QELIctk5SoV12XUDVWi4yhd49F0QlbqfDbRN7ogXo12/SYhUEBS4Wa2uo/mtVKkAdo+GYLtgcggP25y+Qw/I5CenBMJtm2mVFi1b/9AwPaDQo+Yd4S7SrGPyhvcRJcSareIyCXIFSDq6j40qPxGclUv0MLHdwiqxcmmiCP9PQwSnKstCNPBx+IN91E6UfnyBYBhXOWFPZqyHG5OtdBfrx9pIa+0TtFiMBbVGUDidj5QkslyLOZ5Zhx+RMOz+47GpiSg9LaObfJdH4vRsbsZgufvt5hceGE6+lUn3zQzTcwPLaEsQv4HsNMEUKW+tt8K6ZB3GLWaWtII4g0gVlQi2T5P4ZsvBFXf2YJFj4cAL21JVcRanjD2vYk0SbYyuOM2fpBtMJR8pIbVTzdyEw3pPQdyHo4LlbYBFkM3DaXxum9qHr2MHFeAefwJRM79ou5laulfj4nqBPi6hhfT1Z9r9ToDPujOtH+0jRnTIPs4zAWY6rXzUivPJkcu3iqUsqCZcQaU5SHhKli/bHakINyRyTd1ozpdrMsE3rn2VorpgJyVDT47/Bh+xG0F8lCZKofgh4w7DTRxOcIJwkUaPqu30lHHbmc8q0JfGXOgTc496TyjdFx4R529DMzDDkSCVFKp3z8qnG46WsIOIGCp2OXvIiSIihyQFO3FnBx16NbdVlicnTwov4TUPRcsYDIx0p33c3hxOmn1RR1aygYx7XvG3tuMS8ktpfq12ENy3zwpeOit1b8ylnBHwEdaAENaVy03TOLMxIj8rZSfj2AXhnwAKPMLE1AWKufE7OkQAGg2JyJ/H5wB69k9FjwmG0UbkpDGCHNKTMSmwWC6ppV08g/VqUxP50cgXdk19u7Atr1AjCmDXdkFJXYeYwg==","flatData":"","keySize":4096}"';
const wh = new Webhook(secret);
// Lanza una excepción en caso de error, devuelve el contenido verificado en caso de éxito
const payload = wh.verify(payload, headers);
También puedes realizar la verificación de forma manual, sin uso de librerías. Consulta la documentación oficial de nuestro proveedor dando clic aquí.
NOTA
Es necesario utilizar el cuerpo de la solicitud sin procesar cuando se verifican los webhooks, ya que la firma criptográfica es sensible incluso a los más mínimos cambios. Debes tener cuidado con los frameworks que parsean la petición como JSON porque esto también romperá la verificación de la firma.
Validación de direcciones IP de origen
En caso de que tu endpoint receptor de webhooks contenga la configuración de un firewall o NAT, considera permitir el trafico del siguiente listado de direcciones IP para recibir notificaciones de OrkestaPay.
- 54.216.8.72
- 54.173.54.49
- 52.215.16.239
- 52.55.123.25
- 52.6.93.106
- 63.33.109.123
- 44.228.126.217
- 50.112.21.217
- 52.24.126.164
- 54.148.139.208
Updated 3 days ago