Credenciales y JWT
Todo lo que se prueba en la documentación se ejecuta contra el sandbox con la cuenta con la que ingresaste al portal. En producción esa cuenta no interviene: la petición viaja con un JWT que genera tu propia integración a partir de las credenciales que se te entregan. Este capítulo explica cómo se obtiene ese token, qué se le puede poner dentro y para qué sirve lo que le pongas.
1 · Cómo se obtienen las credenciales
Las credenciales no se generan desde el portal. Una vez tu solicitud de desarrollador queda autorizada, InSoft te entrega el juego de credenciales de tu integración: el identificador de la integración, su usuario y su contraseña. Con eso —y con nada más— tu software genera los tokens que necesite.
Las credenciales identifican a tu integración y responden por lo que se emita con ellas. No se comparten con terceros, no se publican en un repositorio ni se incrustan en una aplicación que se distribuya al usuario final: quien las tenga puede emitir en nombre de los emisores que tengas autorizados. Guárdalas donde guardas el resto de tus secretos de servidor, y pide su reemplazo en cuanto sospeches que se filtraron.
La URL de producción se entrega junto con las credenciales. Las rutas que documenta el portal son las mismas: lo único que cambia entre el sandbox y producción es esa base y el token con el que se firma la petición.
2 · Generar el JWT
El token se pide con una sola petición. En el cuerpo van dos objetos: integracion —tus credenciales— y origen,
que es lo que va a quedar marcado en todo documento emitido con ese token.
{
"integracion": {
"tercero": "<el que te entregamos>",
"usuario": "<el que te entregamos>",
"password": "<la que te entregamos>"
},
"origen": {
"nitemisor": "900123456",
"areatrabajo": "SEDE-NORTE",
"itercero": "CLI-00412",
"iusuario": "jperez",
"iusuarioso": "jperez",
"iequipo": 14,
"pid": 8321,
"iapp": "<el que te entregamos>",
"version": "3010020019"
}
} La respuesta trae el token firmado y una copia de lo que quedó dentro de él, sin la contraseña. Ese token es el que viaja en la cabecera de cada petición:
Authorization: Bearer <el token que devolvió la petición>
Cada credencial tiene su propia vigencia, acordada al entregarla. Pasada esa vigencia toda petición
responde 401. Lo natural es renovar por tiempo, no
por error: guarda la fecha de vencimiento que devuelve la respuesta y pide el token nuevo antes de
llegar a ella, en lugar de esperar a que una emisión falle para descubrirlo.
3 · Los datos de origen
El bloque origen es la parte que más rendimiento le saca a la credencial. Queda dentro del token, y de ahí pasa a
cada documento que se emita con él: no lo repites en cada petición, no altera el contenido del
documento y no lo ve la DIAN. Es tuyo, y sirve para responder después preguntas de tu propia
operación —de qué sede salió esta factura, qué usuario la hizo, con qué versión de mi software—.
Todos son opcionales salvo nitemisor. Lo
que no envíes simplemente no queda marcado: no hay valor por defecto que se invente por ti.
4 · Un token por origen, y tantos como necesites
Con las mismas credenciales puedes generar todos los JWT que quieras, cada uno con su propio bloque de origen. Es la forma prevista de repartir la integración: un token por sede, por caja, por instalación o por servicio, y cada uno emitiendo con su propia marca.
- Reparte, no compartas Genera el token en tu servidor y entrégalo ya firmado a cada punto que emite. Lo que se distribuye es el token; las credenciales con las que se generó se quedan donde tú las controlas.
- Un origen distinto por cada cosa que quieras distinguir después El corte que no marques al emitir no se puede reconstruir más tarde. Si vas a querer saber de
qué caja salió una factura, esa caja tiene que estar en el
areatrabajodel token con el que se emitió. - Revoca lo que deja de operar Un equipo que sale de servicio deja su token revocado, no vencido. Es la diferencia entre cerrar la puerta y esperar a que se cierre sola.
5 · La cabecera Authorization en cada ficha
Todas las fichas del portal documentan la misma cabecera Authorization: Bearer …,
y en las dos etapas es la misma cabecera con el mismo formato. Lo que cambia es quién la pone:
- En el sandbox la pone el portal por ti, con la sesión con la que ingresaste. No tienes que hacer nada: cada ejecución la renueva antes de enviar.
- En producción la pones tú, con el JWT de este capítulo. La sesión del portal no interviene: tu integración no se autentica contra el portal, se autentica con su credencial.
Por eso una integración escrita contra el sandbox pasa a producción cambiando dos cosas: la URL base y el token. El cuerpo, las rutas y las respuestas son los mismos.