Saltar al contenido principal
Para hacer solicitudes a nuestros endpoints de Transferencias que mueven dinero, necesitarás incluir una JSON Web Signature (JWS). JWS es un estándar para firmar digitalmente datos a fin de 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 privada JWSTu llave privada JWS 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 solicitudes de transferencia maliciosas 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 pública JWS.

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 asegurar la integridad y autenticidad de cada llamada a la API de Transferencias que mueve dinero.

Usando nuestro SDK

Si estás usando Python o Node, nuestros SDK de Python y SDK de Node generan las firmas automáticamente por ti. Simplemente inicializa el cliente Fintoc con el argumento jws_private_key y el SDK se encarga 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 la generación de la firma JWS, necesitamos trabajar con el string JSON exacto que se enviará en la solicitud HTTP. Esto típicamente se crea convirtiendo el objeto del cuerpo de la solicitud Outbound Transfer a 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. Enviar 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, la marca de tiempo 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 las solicitudes. 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ían los mismos datos 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 tiempo de 2 minutos para evitar el procesamiento de solicitudes obsoletas. En conjunto, 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 input de firma

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

Generar la firma del token JWS

Una vez que tengas el input de firma 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 la firma resultante en Base64URL (sin padding)
  2. Codificar la firma resultante en Base64URL (sin padding)

Opcional: Verificar el token JWS

Algunas bibliotecas pueden recodificar los payloads JSON con distinto espaciado u orden de claves, 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í tienes un ejemplo completo de una función que lo une todo (deberás instalar las bibliotecas mencionadas para probarlo).