tecsas3-cli soporta dos esquemas de autenticación contra el backend Django del Ecosistema Salud TecsaS3: el DRF Token legacy y JWT (SimpleJWT). Ambos se almacenan localmente en el keyring del sistema operativo o, cuando este no está disponible, en un archivo con permisos 0600 que sólo el usuario actual puede leer y escribir.
Esta página documenta los sub-comandos de tecsas3 auth, los mecanismos de almacenamiento de credenciales y la auto-detección del tipo de token en tiempo de ejecución. Para la configuración de tenant y perfiles, consulta configuration.
Esquemas de autenticación
- DRF Token
- JWT
Token opaco de 40 caracteres generado por
rest_framework.authtoken y expuesto en POST /api/autenticar/. Es el esquema por defecto del CLI y se envía como Authorization: Token <KEY>. Se utiliza en flujos legacy y tokens de larga duración asociados a un usuario.Cuando el CLI detecta que el token guardado (en keyring o en
TECSAS3_TOKEN) comienza por eyJ — prefijo típico de un JWT codificado en base64 — y el esquema configurado es token, promueve automáticamente el esquema a jwt para emitir el header Bearer correcto. No hace falta cambiar --auth-scheme en runtime; la detección vive en cli/src/tecsas3_cli/runtime.py:Runtime.build.Almacenamiento de credenciales
Los secretos nunca se persisten enconfig.toml. Viven en una de dos ubicaciones, según disponibilidad del backend keyring del sistema operativo:
- Keyring del SO — entrada
tecsas3-cli:<profile>:access(y:refreshsi aplica). Es la ruta prioritaria: si el backend responde, se usa. Permite múltiples perfiles sin colisión deusername. - Archivo fallback —
~/.tecsas3/credentials, JSON con la estructura{<profile>: {"access": "...", "refresh": "..."}}. Permisos0600(sólo lectura/escritura para el usuario); el directorio padre se crea con0700.
ls -la ~/.tecsas3/ y se borra de forma segura eliminando el archivo. El CLI no expone un servicio central de logout server-side: la revocación real la hace el admin Django o, en el caso de JWT, la app rest_framework_simplejwt.token_blacklist.
Sub-comandos de tecsas3 auth
Ejemplos de uso
Variables de entorno relevantes
Buenas prácticas
- Un perfil por entorno — usa
--profile dev,--profile prod,--profile stagingy no mezcles tokens entre ellos. - Rotación periódica — al menos cada 90 días para DRF Token; el
refreshde JWT se puede rotar sin re-login hasta que expire. - No combines
--debugcon--redact-phi=falseen producción — la redacción PHI está activa por defecto en logs stderr para evitar fugas accidentales denombres,cedulaodiagnostico. - En CI, exporta
TECSAS3_TOKENyNO_COLOR=1— evita keyring (que requiere TTY) y mantiene los logs limpios.
Troubleshooting
Login fallido (401) con credenciales correctas
Verifica que el esquema (--scheme) coincide con el del backend. Si el servidor migró de DRF Token a JWT, el flag --scheme token seguirá mandando Authorization: Token ... y el backend lo rechazará aunque la contraseña sea válida.
Keyring backend not available en CI
El backend keyring requiere un TTY y un servicio de sistema (gnome-keyring, kwallet, Keychain). En runners de CI no hay ninguno de los dos. Soluciones:
AuthError (exit 3) al primer comando del día
El token DRF Token no expira por sí solo pero puede ser revocado por el admin. El JWT expira según ACCESS_TOKEN_LIFETIME (configurado en SIMPLE_JWT). Si recibes Token expired at ..., rota:
Token detectado como token cuando es JWT
Si el esquema configurado en config.toml es token pero el token guardado empieza por eyJ, el runtime auto-promueve a jwt. Si aún así el backend responde 401, fuerza el esquema en la línea de comando:
Inspección del perfil y el token
Integración con agentes de IA
La combinación--json --no-input + credenciales vía env permite que cualquier agente (claude-code, opencode, mcode, pi, hermes) opere el CLI sin intervención humana.
- Capturar siempre
exit_code— losTecsaErrorse serializan astderrconcode,message,hintyrequest_id. - Preferir
--jsonsobre--format yaml|csv— el parseo es 1:1 sin ambigüedades. - Evitar
--debugen producción — filtra PHI al contexto del agente. - Rotar tokens vía
auth rotate --logincuando se detecteexit 3repetido.
Rotación de credenciales en flota
Para rotar tokens en muchos hosts a la vez:Siguientes pasos
- Aprende a configurar el tenant activo y los perfiles.
- Revisa la tabla completa de códigos de salida para scripting.
- Consulta la redacción PHI activa por defecto en logs.
- Consulta la referencia de API auth para endpoints relacionados.