MagicTradeBot implementa una autenticación segura basada en tokens utilizando JWT (JSON Web Tokens) para proteger su API de gestión. Esto garantiza que solo las instancias de bots y usuarios autorizados puedan acceder a los servicios de trading, los datos y las operaciones relacionadas con los exchanges.
🚀 Visión general
La aplicación de gestión requiere que todas las solicitudes API estén autenticadas mediante un token JWT válido. Los tokens se generan utilizando una clave secreta segura con el algoritmo HMAC SHA-256 (HS256) y deben incluirse en el encabezado Authorization
de cada solicitud API.
⚙️ Configuración
1. Definir la clave secreta JWT
En tu archivo appsettings.json
(o como variables de entorno), configura la clave secreta utilizada para firmar los tokens:
{
"JwtSettings": {
"SecretKey": "YOUR_SECURE_RANDOM_SECRET_KEY", // Se recomiendan mínimo 32 caracteres
"Issuer": "MagicTradeBot",
"Audience": "MagicTradeBotClients",
"TokenExpiryMinutes": 120
}
}
También puedes usar variables de entorno en implementaciones con Docker o en la nube:
JwtSettings__SecretKey=YOUR_SECURE_RANDOM_SECRET_KEY
2. Generación del token durante el arranque del bot
Cuando se lanza una instancia del bot de MagicTradeBot, solicita credenciales de autenticación (por ejemplo, botId
y authKey
). Estas credenciales se envían de forma segura al endpoint de autenticación de la aplicación de gestión.
Si las credenciales son válidas, la aplicación de gestión emite un token JWT firmado. Este token es almacenado por la instancia del bot y se incluye automáticamente en el encabezado Authorization
de todas las solicitudes API posteriores.
POST /api/auth/login
Cuerpo de la solicitud:
{
"botId": "bot-eu-01",
"authKey": "your-secure-auth-key"
}
Respuesta exitosa:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Después de recibir el token, la instancia del bot continúa con sus operaciones (escaneo, trading, actualización de estado, etc.) incluyendo el JWT en todas las solicitudes API:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Esto garantiza una comunicación segura y autenticada entre las instancias del bot y la aplicación de gestión.
🧩 Control de acceso y gestión de roles
- Asignar roles en los claims del JWT (por ejemplo,
role: "bot"
,"admin"
, o"viewer"
) - Restringir los endpoints API usando políticas o filtros (por ejemplo,
[Authorize(Roles = "admin")]
) - Para endpoints específicos del bot, verificar los claims contra
botId
oinstanceId
- Denegar el acceso si el token ha expirado, es inválido o ha sido manipulado
🧪 Ejemplo de llamada API con JWT
GET /api/trade/symbols
Encabezados:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
✅ Buenas prácticas
- Usar una clave secreta larga y segura (≥256 bits) para HS256
- Almacenar secretos en variables de entorno o bóvedas seguras (nunca en el código)
- Rotar las claves secretas de JWT periódicamente
- Establecer tiempos de expiración cortos para los tokens (por ejemplo, 1–2 horas) y usar tokens de renovación si es necesario
- Habilitar HTTPS para evitar la interceptación de tokens durante la transmisión
- Registrar y alertar sobre intentos fallidos de validación de tokens
🔐 Mejoras opcionales
- Implementar un mecanismo de Refresh Token para sesiones de larga duración
- Usar HMAC o HMAC con enlace IP para evitar el uso indebido de tokens entre servidores
- Soportar listas negras o revocación de JWT tras cierres de sesión o incidentes de seguridad