82 lines
2.0 KiB
Markdown
82 lines
2.0 KiB
Markdown
|
|
# 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.
|