Saltar al contenido principal
Fintoc firma cada evento enviado a tus webhook endpoints con el header Fintoc-Signature. Este header te permite verificar que cada evento recibido fue de hecho enviado por Fintoc y no por un tercero. Fintoc genera un secreto que se muestra solo una vez al momento del registro de un Webhook Endpoint. Este secreto es necesario para validar la firma de Fintoc de cada evento.

Verifica que los eventos sean enviados por Fintoc

Cada evento enviado por Fintoc incluye el header Fintoc-Signature. La estructura del header es la misma para cada evento. Contiene un timestamp denotado por la clave t y una firma denotada por la clave v1. Aquí hay un ejemplo de un header Fintoc-Signature:
Las firmas enviadas por Fintoc son simplemente códigos HMAC generados al firmar el cuerpo en bruto de la solicitud con la función hash SHA-256 en el momento indicado por el timestamp y usando el secreto del Webhook Endpoint. ¡Comencemos a validar la firma del evento!

Validar la firma usando nuestro SDK

Si estás usando Python o Node, la forma más fácil de verificar las firmas de los webhooks es con nuestro SDK de Python o SDK de Node.
Python
Node
Para un ejemplo completo y funcional, revisa el código completo aquí.

Validar la firma usando tu propio código

Si quieres escribir tu propia implementación o usar un lenguaje de programación distinto, sigue estos pasos:

Extraer el timestamp y la firma del header

Divide el header Fintoc-Signature en un arreglo por el carácter ,. Luego, divide cada elemento del arreglo generado por el carácter = para obtener un par clave-valor. Finalmente, obtén los valores correspondientes para cada clave.

Reconstruir el mensaje firmado

El mensaje que Fintoc firmó antes de enviar el webhook corresponde al timestamp concatenado a un carácter . y al cuerpo en bruto de la solicitud. Reconstruyamos ese mismo mensaje usando el timestamp que acabamos de desempaquetar del header Fintoc-Signature y el cuerpo en bruto de la solicitud.
Asegúrate de usar el cuerpo raw de la solicitud directamente desde la solicitud. Diferentes librerías pueden representar el JSON parseado de manera distinta. Un ejemplo del valor que message debería tener sería el siguiente:

Generar la firma

Ahora que tienes el mensaje que necesita ser firmado, hagamos justamente eso, usando la función hash SHA-256 y el secreto generado al crear el webhook endpoint.

Comparar las firmas

Finalmente, comparemos la firma que desempaquetamos del header Fintoc-Signature con la que acabamos de obtener siguiendo los pasos de la guía. Si ambas firmas coinciden, entonces puedes asumir que el evento fue de hecho enviado por Fintoc.

Prevenir un ataque de replay

Para evitar un ataque de replay, recomendamos que definas un rango de tolerancia para los retrasos de los eventos. Al recibir y obtener el timestamp de un evento, verifica que caiga dentro de tu rango de tolerancia. Si ese no es el caso, descarta el evento.