MagicTradeBot utilise une authentification sécurisée basée sur les jetons avec les JWT (JSON Web Tokens) pour protéger son API de gestion. Cela garantit que seules les instances de bot et les utilisateurs autorisés peuvent accéder aux services de trading, aux données et aux opérations liées aux échanges.
🚀 Vue d’ensemble
L’application de gestion exige que toutes les requêtes API soient authentifiées à l’aide d’un jeton JWT valide. Les jetons sont générés à l’aide d’une clé secrète sécurisée avec l’algorithme HMAC SHA-256 (HS256) et doivent être envoyés dans l’en-tête Authorization
de chaque requête API.
⚙️ Configuration
1. Définir la clé secrète JWT
Dans votre fichier appsettings.json
(ou via des variables d’environnement), configurez la clé secrète utilisée pour signer les jetons :
{
"JwtSettings": {
"SecretKey": "YOUR_SECURE_RANDOM_SECRET_KEY", // Minimum recommandé : 32 caractères
"Issuer": "MagicTradeBot",
"Audience": "MagicTradeBotClients",
"TokenExpiryMinutes": 120
}
}
En alternative, pour les déploiements Docker ou cloud, vous pouvez utiliser une variable d’environnement :
JwtSettings__SecretKey=YOUR_SECURE_RANDOM_SECRET_KEY
2. Génération du jeton lors du démarrage du bot
Lorsqu’une instance de bot MagicTradeBot est lancée, elle demande des identifiants d’authentification (par exemple botId
et authKey
). Ces informations sont transmises de manière sécurisée au point de terminaison d’authentification de l’application de gestion.
Si les identifiants sont valides, l’application renvoie un jeton JWT signé. Ce jeton est stocké par l’instance du bot et ajouté automatiquement dans l’en-tête Authorization
de toutes les requêtes API suivantes.
POST /api/auth/login
Corps de la requête :
{
"botId": "bot-eu-01",
"authKey": "your-secure-auth-key"
}
Réponse en cas de succès :
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Après avoir reçu le jeton, l’instance du bot poursuit ses opérations (analyse, exécution des trades, mise à jour du statut, etc.) en incluant le JWT dans chaque requête API :
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Cela garantit une communication sécurisée et authentifiée entre les bots et l’application de gestion.
🧩 Contrôle d’accès et gestion des rôles
- Attribuez des rôles dans les données du JWT (ex. :
role: "bot"
,"admin"
ou"viewer"
) - Restreignez l’accès aux points de terminaison avec des filtres ou des règles (ex. :
[Authorize(Roles = "admin")]
) - Pour les points de terminaison spécifiques aux bots, vérifiez les champs du jeton comme
botId
ouinstanceId
- Refusez l’accès si le jeton est expiré, invalide ou falsifié
🧪 Exemple d’appel API avec JWT
GET /api/trade/symbols
En-têtes :
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
✅ Bonnes pratiques
- Utilisez une clé secrète longue et sécurisée (≥256 bits) avec HS256
- Stockez les secrets dans des variables d’environnement ou des coffres-forts sécurisés (jamais dans le code)
- Faites une rotation périodique des clés JWT
- Définissez une durée de vie courte pour les jetons (ex. : 1 à 2 heures) et utilisez des jetons de rafraîchissement si nécessaire
- Activez HTTPS pour éviter l’interception des jetons pendant leur transmission
- Consignez et surveillez les tentatives de validation échouées
🔐 Améliorations facultatives
- Implémentez un mécanisme de jetons de rafraîchissement pour les sessions longues
- Utilisez HMAC ou HMAC avec liaison IP pour empêcher la réutilisation des jetons sur d’autres serveurs
- Supportez une liste noire de jetons ou révocation après une déconnexion ou compromission