MagicTradeBot implementa un’autenticazione sicura basata su token utilizzando JWT (JSON Web Tokens) per proteggere la sua API di gestione. Questo garantisce che solo le istanze del bot e gli utenti autorizzati possano accedere ai servizi di trading, ai dati e alle operazioni relative agli exchange.
🚀 Panoramica
L'app di gestione richiede che tutte le richieste API siano autenticate utilizzando un token JWT valido. I token vengono generati usando una chiave segreta sicura con l'algoritmo HMAC SHA-256 (HS256) e devono essere inviati nell'intestazione Authorization
di ogni richiesta API.
⚙️ Configurazione
1. Imposta la chiave segreta JWT
Nel tuo file appsettings.json
(o tramite variabili d’ambiente), configura la chiave segreta JWT utilizzata per firmare i token:
{
"JwtSettings": {
"SecretKey": "YOUR_SECURE_RANDOM_SECRET_KEY", // Si consiglia almeno 32 caratteri
"Issuer": "MagicTradeBot",
"Audience": "MagicTradeBotClients",
"TokenExpiryMinutes": 120
}
}
In alternativa, per i deployment Docker o su cloud, puoi usare una variabile d’ambiente:
JwtSettings__SecretKey=YOUR_SECURE_RANDOM_SECRET_KEY
2. Generazione del token all'avvio del bot
Quando viene avviata un’istanza del bot MagicTradeBot, viene richiesto di inserire le credenziali di autenticazione (es. botId
e authKey
). Queste vengono trasmesse in modo sicuro all'endpoint di autenticazione dell’app di gestione.
Se le credenziali sono valide, l’app di gestione restituisce un token JWT firmato. Questo token viene memorizzato dall’istanza del bot e allegato automaticamente nell’intestazione Authorization
di tutte le chiamate API successive.
POST /api/auth/login
Body della richiesta:
{
"botId": "bot-eu-01",
"authKey": "your-secure-auth-key"
}
Risposta di successo:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Dopo aver ricevuto il token, l’istanza del bot continua le sue operazioni (scansione, trading, aggiornamenti di stato, ecc.) includendo il JWT in ogni richiesta API:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Questo garantisce una comunicazione sicura e autenticata tra le istanze del bot e l’app di gestione.
🧩 Controllo degli accessi e gestione dei ruoli
- Assegna i ruoli come claim nel JWT (es.
role: "bot"
,"admin"
o"viewer"
) - Limita gli endpoint API usando policy o filtri (es.
[Authorize(Roles = "admin")]
) - Per endpoint specifici del bot, verifica i claim del token con
botId
oinstanceId
- Nega l’accesso se il token è scaduto, invalido o manomesso
🧪 Esempio di chiamata API con JWT
GET /api/trade/symbols
Headers:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
✅ Best Practices
- Usa una chiave segreta lunga e sicura (≥256 bit) per HS256
- Archivia i segreti in variabili d’ambiente o vault sicuri (non nel codice)
- Ruota le chiavi JWT periodicamente
- Imposta una scadenza breve del token (es. 1–2 ore) e usa token di refresh se necessario
- Abilita HTTPS per evitare l'intercettazione dei token durante la trasmissione
- Registra e invia alert per i tentativi falliti di validazione del token
🔐 Miglioramenti opzionali
- Implementa un meccanismo di Refresh Token per sessioni di lunga durata
- Utilizza HMAC o HMAC + binding IP per impedire il riutilizzo dei token su altri server
- Supporta blacklist JWT o revoca dopo logout o compromissione