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 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 argumentojws_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:
- Crear la firma JWS
- Enviarlo 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, el timestamp 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 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 losheaders 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:-
Firmar el input usando tu llave privada con:
- RSA con padding PKCS1v15
- Codificar en Base64URL la firma resultante (sin padding)
- 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 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: