# Sistema de Tokens ## Descripción El sistema de tokens permite autenticar las requests de facturas sin necesidad de pasar la contraseña del certificado en cada request. ## Flujo de Uso ### 1. Obtener Clave Pública ```bash curl http://localhost:6789/api/v1/auth/public-key ``` Response: ```json {"public_key": "base64..."} ``` ### 2. Descifrar clave pública El cliente debe descifrar la clave pública RSA (codificada en base64) y usarla para cifrar la contraseña. ### 3. Registrar Certificado ```bash curl -X POST http://localhost:6789/api/v1/auth/register \ -H "Content-Type: application/json" \ -d '{ "cert_name": "personal", "cert_path": "C:/ruta/al/cert.p12", "password_encrypted": "base64_cifrada" }' ``` Response: ```json { "success": true, "cert": { "subject": "...", "days_until_expiry": 816 }, "token": "A1B2C3D4E5F6..." } ``` ### 4. Usar Token en Facturas (futuro) El token se pasados en el header `Authorization`: ```bash curl -X POST http://localhost:6789/api/v1/facturas \ -H "Content-Type: application/json" \ -H "Authorization: Bearer A1B2C3D4E5F6..." \ -d '{...}' ``` ## Almacenamiento Los tokens se almacenan en memoria (`map[string]*Certificate`) junto con: - ID del certificado - Ruta al archivo .p12 - Contraseña descifrada ## Seguridad - Los tokens son strings aleatorios de 32 bytes codificados en hex mayúscula - Solo se almacena en memoria (se pierde al reiniciar la API) - La contraseña nunca se expone en responses - El token permite ejecutar operaciones con el certificado registrado ## Consideraciones 1. **Sesiones efímeras**: Al reiniciar la API se pierden los tokens 2. **Un token por certificado**: Si registras el mismo cert, se genera nuevo token 3. **Varios certificados**: Se puede registrar más de un certificado, cada uno con su token ## Estado Actual Actualmente los tokens se generan pero no se usan en las requests de facturas. El sistema usa el certificado registrado directamente.