VerifactuMidAPI/documentacion/tokens.md

82 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

# 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.