Saltar al contenido principal
Para hacer solicitudes a nuestros endpoints de Transfers que mueven dinero, deberás incluir una JSON Web Signature (JWS). JWS es un estándar para firmar digitalmente datos y garantizar su integridad y autenticidad. Las acciones protegidas incluyen crear transferencias salientes y devolver transferencias entrantes.

Generar llaves JWS

Para firmar una llamada a la API, debes seguir estos pasos:

Generar un par de llaves JWS pública y privada

Ejecuta este comando en tu terminal:
Esto genera dos archivos:
  • private_key.pem que contiene tu llave privada
  • public_key.pem que contiene tu llave pública
Cada archivo debería verse similar a este ejemplo:
public_key.pem
private_key.pem
Nunca compartas tu llave JWS privadaTu llave JWS privada es altamente sensible y debe permanecer confidencial en todo momento. Fintoc nunca te pedirá esta llave. Si alguien obtiene acceso a tu llave privada, podría firmar maliciosamente solicitudes de transferencias en tu nombre.

Sube tu llave pública al Dashboard

  1. Ve a dashboard.fintoc.com
  2. Ve a la pestaña API Keys en la barra lateral
  3. Si los productos que requieren JWS están activos para tu organización, verás una sección JWS Public Keys. Haz clic en el botón “Add JWS Key” y sube tu llave JWS pública.

Generar firma

Ahora que cargaste tu llave pública en tu Dashboard de Fintoc, puedes generar una firma basada en la llave privada. Esto es necesario para garantizar la integridad y autenticidad de cada llamada a la API de Transfers que mueve dinero.

Usando nuestro SDK

Si estás usando Python o Node, nuestros SDK de Python y SDK de Node generan automáticamente las firmas por ti. Simplemente inicializa el cliente de Fintoc con el argumento jws_private_key, y el SDK se encargará del resto:
Node

Ejemplo paso a paso

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

Preparar el payload

Para generar la firma JWS, necesitamos trabajar con el string JSON exacto que será enviado en la solicitud HTTP. Esto normalmente se crea convirtiendo el objeto del cuerpo de la solicitud de Outbound Transfer en un string JSON usando el serializador JSON de tu lenguaje.
El string JSON debe ser consistenteAl serializar el cuerpo de tu solicitud a JSON, debes usar exactamente el mismo string para dos propósitos:
  1. Crear la firma JWS
  2. Enviarlo como payload en tu solicitud HTTP
Cualquier pequeña diferencia entre el JSON usado para crear la firma JWS y el payload en tu solicitud HTTP puede invalidar la firma.

Cargar la llave privada y configurar los headers

Carga tu llave privada desde el archivo PEM y configura los headers JWS. Los headers incluyen el algoritmo de firma (RS256), un nonce único para prevenir firmas duplicadas, el timestamp actual y la especificación de campos críticos.

Prevenir un ataque de replay

Fintoc usa los headers nonce y ts (timestamp) en su proceso de autenticación JWS para protegerse contra ataques de replay y garantizar la integridad de la solicitud. El string nonce debe ser un valor único y aleatorio, y debe incluirse en cada solicitud, haciendo que cada firma sea distinta incluso si se envía la misma información varias veces. Fintoc se asegura de que cada nonce se use solo una vez y rechazará cualquier solicitud que contenga un nonce duplicado. El timestamp ts registra cuándo se creó la solicitud, y los servidores de Fintoc validan que esté dentro de una ventana de 2 minutos para evitar el procesamiento de solicitudes antiguas. Juntos, el nonce y el timestamp brindan una protección robusta al asegurar que las solicitudes interceptadas o manipuladas no puedan reutilizarse, protegiendo tu integración contra actividades maliciosas.

Generar el signing input

El signing input de un JWS consiste en concatenar los headers codificados en base64url y el raw_body codificado en base64url con un punto . entre ambos, ambos sin padding:

Generar la firma del token JWS

Una vez que tengas el signing input listo, crearás la firma criptográfica usando tu llave privada. El proceso involucra:
  1. Firmar el input usando tu llave privada con:
    1. RSA con padding PKCS1v15
    2. Codificar en Base64URL la firma resultante (sin padding)
  2. Codificar en Base64URL la firma resultante (sin padding)

Opcional: verificar el token JWS

Algunas librerías pueden re-codificar payloads JSON con espacios o ordenamiento de keys distintos, o cambiar su codificación. Para depurar la firma, puedes inspeccionar el token generado en https://jwt.io para verificar su contenido. También recomendamos verificar que el payload del token JWS sea igual al raw_body enviado en la solicitud http.

Construir el header Fintoc-JWS-Signature

Construye el header Fintoc-JWS-Signature concatenando el header protegido y la firma:

Ejemplo completo

Aquí un ejemplo completo de una función que junta todo (tendrás que instalar las librerías mencionadas para probarla).