Skip to main content

Editor de solicitudes de firma incrustable

Incrusta el editor de solicitudes de firma de Firma dentro de tu aplicación usando autenticación JWT para un acceso seguro y de tiempo limitado. Esto es ideal para integraciones de marca blanca y aplicaciones multiempresa.

Casos de uso

  • Flujos de firma de marca blanca: gestiona solicitudes de firma bajo tu propia marca
  • Aplicaciones multiempresa: acceso seguro por firmante sin exponer claves API
  • Flujos de trabajo de documentos incrustados: gestión fluida de solicitudes de firma dentro de tu producto
  • Acceso de tiempo limitado: los tokens caducan automáticamente por seguridad (expiración de 7 días)

Cómo funciona

  1. Tu servidor solicita un token JWT a la API de Firma usando tu clave API
  2. Firma devuelve un token JWT de corta duración con el ID de la solicitud de firma
  3. Tu frontend incrusta el editor con el token JWT
  4. El token caduca automáticamente después de 7 días
Límite de solicitudes: los endpoints JWT admiten 100 solicitudes por minuto por clave API para aplicaciones de alto volumen.

Autenticación JWT

Generar token JWT

Genera un token JWT para una solicitud de firma específica usando el endpoint /jwt/generate-signing-request. Endpoint: POST /jwt/generate-signing-request Cuerpo de la solicitud:
Respuesta (200 OK):
Encabezados de límite de solicitudes:

Guía de implementación

Seguridad: nunca expongas tu clave API en código del lado del cliente. Genera siempre los tokens JWT desde tu backend seguro.

Backend: generar token JWT

Llama a la API de Firma desde tu backend para generar un token JWT. Tu endpoint de backend debe aceptar un ID de solicitud de firma y devolver el JWT a tu frontend. Ejemplo en Node.js:
Ejemplo en Python:

Implementación frontend — HTML / JavaScript nativo

Implementación frontend — React

Opciones de configuración

Métodos de instancia

Usa triggerClose() cuando tu aplicación anfitriona necesite cerrar el editor desde su propia interfaz, por ejemplo, ante un evento de navegación del padre o un botón de “atrás”:

Eventos postMessage (editor → anfitrión)

El editor de solicitudes de firma de Firma emitirá eventos postMessage para acciones importantes del ciclo de vida. A continuación se muestra un esquema de eventos recomendado y mínimo que puedes implementar para reaccionar a los guardados y envíos del editor.
Usa estos eventos para seguir la actividad del editor sin realizar llamadas API adicionales, lo que te ayuda a mantenerte dentro de los límites de solicitudes.
Envoltorio del evento (payload de window.postMessage):

Ejemplo de listener en el cliente (JS simple)


Gestión del ciclo de vida del token

Los tokens JWT se generan con un tiempo de expiración de 7 días para flujos de edición habituales. El editor gestionará automáticamente la caducidad del token.

Caducidad automática

Los tokens JWT caducan automáticamente después de 7 días según la marca de tiempo expires_at. Después de la caducidad:
  • El editor incrustado rechazará el token
  • Se debe solicitar un nuevo token para continuar
  • No se necesita ninguna llamada API: los tokens caducan de forma pasiva

Renovación del token (opcional)

Para sesiones de edición de larga duración, puedes renovar el token antes de su caducidad usando el método updateJWT():

Límite de solicitudes

Los endpoints JWT admiten 100 solicitudes por minuto por clave API. Encabezados de límite de solicitudes:
Si superas el límite de solicitudes (respuesta 429):
  • Almacena en caché los tokens y reutilízalos hasta su caducidad (7 días)
  • Implementa un retroceso exponencial para los reintentos
  • Supervisa el encabezado X-RateLimit-Remaining
  • Genera tokens bajo demanda, no de forma anticipada

Buenas prácticas de seguridad

Nunca expongas tu clave API en código del lado del cliente. Genera siempre los tokens JWT desde un endpoint de servidor seguro.

✅ Qué hacer

  • ✅ Genera los tokens desde tu servidor backend
  • ✅ Supervisa los límites de solicitudes (100 solicitudes/minuto)
  • ✅ Usa HTTPS para todas las solicitudes API
  • ✅ Usa readOnly: true para acceso de solo visualización

❌ Qué no hacer

  • ❌ No expongas claves API en código frontend
  • ❌ No reutilices tokens entre sesiones o firmantes
  • ❌ No registres los tokens JWT en logs (riesgo de seguridad)
  • ❌ No compartas tokens entre distintas solicitudes de firma

Solución de problemas

Error de token caducado

Síntoma: el editor muestra “Token expired” o un error de autenticación Solución:
  • Implementa la renovación del token antes de su caducidad (ventana de 7 días)
  • Genera un nuevo token y llama a editor.updateJWT(newToken)
  • Comprueba la sincronización del reloj del sistema

401 Unauthorized

Síntoma: la generación del JWT falla con un 401 Posibles causas:
  • Clave API inválida o ausente
  • La clave API no tiene los permisos necesarios
  • La clave API está deshabilitada
Solución: verifica la clave API en el panel y comprueba los permisos

404 Not Found

Síntoma: no se encuentra la solicitud de firma al generar el JWT Posibles causas:
  • El ID de la solicitud de firma no existe
  • La solicitud de firma pertenece a otro espacio de trabajo
  • La solicitud de firma fue eliminada
Solución: verifica el ID de la solicitud de firma y el acceso al espacio de trabajo

Límite de solicitudes superado

Síntoma: 429 Too Many Requests Solución:
  • Implementa el almacenamiento en caché de tokens (la ventana de expiración de 7 días es generosa)
  • Espera al restablecimiento del límite de solicitudes (comprueba el encabezado X-RateLimit-Reset)
  • Implementa lógica de reintentos con retroceso exponencial

El editor no carga

Síntoma: el contenedor está vacío o muestra un indicador de carga indefinidamente Posibles causas:
  • El script no se cargó (comprueba el evento script.onload)
  • JWT o ID de solicitud de firma inválidos
  • Problemas de CORS (comprueba la consola del navegador)
Solución:
  • Verifica que el script se cargue desde https://app.firma.dev/embed/signing-request-editor.js
  • Comprueba que el JWT sea válido y no haya caducado
  • Asegúrate de que el backend devuelva los encabezados CORS correctos

Próximos pasos