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:private_key.pemque contiene tu llave privadapublic_key.pemque contiene tu llave pública
public_key.pem
private_key.pem
Sube tu llave pública al Dashboard
- Ve a dashboard.fintoc.com
- Ve a la pestaña API Keys en la barra lateral
- 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 argumentojws_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:
- Crear la firma JWS
- Enviar como payload en tu solicitud HTTP
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 headersnonce 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 losheaders 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:-
Firmar el input usando tu llave privada con:
- RSA con padding PKCS1v15
- Codificar la firma resultante en Base64URL (sin padding)
- 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 alraw_body enviado en la solicitud HTTP.
Construir el header Fintoc-JWS-Signature
Construye el headerFintoc-JWS-Signature concatenando el header protegido y la firma: