MagicTradeBot implementiert eine sichere tokenbasierte Authentifizierung mit JWT (JSON Web Tokens), um seine Management-API zu schützen. Dies stellt sicher, dass nur autorisierte Bot-Instanzen und Benutzer Zugriff auf Handelsdienste, Daten und Exchange-bezogene Operationen haben.
🚀 Übersicht
Die Management-App verlangt, dass alle API-Anfragen mit einem gültigen JWT-Token authentifiziert werden. Tokens werden mit einem sicheren Secret Key unter Verwendung des HMAC SHA-256 (HS256) Algorithmus generiert und müssen im Authorization
-Header jeder API-Anfrage übermittelt werden.
⚙️ Konfiguration
1. JWT-Geheimschlüssel festlegen
In deiner appsettings.json
(oder als Umgebungsvariable) konfiguriere den geheimen Schlüssel, mit dem Tokens signiert werden:
{
"JwtSettings": {
"SecretKey": "YOUR_SECURE_RANDOM_SECRET_KEY", // Mindestens 32 Zeichen empfohlen
"Issuer": "MagicTradeBot",
"Audience": "MagicTradeBotClients",
"TokenExpiryMinutes": 120
}
}
Alternativ kannst du für Docker- oder Cloud-Deployments Umgebungsvariablen verwenden:
JwtSettings__SecretKey=YOUR_SECURE_RANDOM_SECRET_KEY
2. Token-Erstellung beim Bot-Start
Wenn eine MagicTradeBot Bot-Instanz gestartet wird, fordert sie Authentifizierungsdaten an (z. B. botId
und authKey
). Diese Anmeldedaten werden sicher an den Authentifizierungs-Endpunkt der Management-App gesendet.
Wenn die Anmeldedaten gültig sind, gibt die Management-App ein signiertes JWT-Token aus. Dieses Token wird von der Bot-Instanz gespeichert und automatisch in den Authorization
-Header aller nachfolgenden API-Aufrufe eingefügt.
POST /api/auth/login
Request Body:
{
"botId": "bot-eu-01",
"authKey": "your-secure-auth-key"
}
Successful Response:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Nach dem Empfang des Tokens führt die Bot-Instanz ihre Aufgaben (Scans, Handel, Statusaktualisierung usw.) mit JWT in allen API-Anfragen fort:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Dies gewährleistet eine sichere und authentifizierte Kommunikation zwischen Bot-Instanzen und der Management-App.
🧩 Zugriffskontrolle & Rollenverwaltung
- Weise JWT-Claims Rollen zu (z. B.
role: "bot"
,"admin"
oder"viewer"
) - Beschränke API-Endpunkte mit Richtlinien oder Filtern (z. B.
[Authorize(Roles = "admin")]
) - Bei Bot-spezifischen Endpunkten: Token-Claims mit
botId
oderinstanceId
prüfen - Zugriff verweigern, wenn das Token abgelaufen, ungültig oder manipuliert ist
🧪 Beispiel-API-Aufruf mit JWT
GET /api/trade/symbols
Headers:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
✅ Best Practices
- Verwende einen langen und sicheren Geheimschlüssel (≥256 Bit) für HS256
- Speichere Geheimnisse in Umgebungsvariablen oder sicheren Tresoren (nicht im Quellcode)
- Rotiere JWT-Schlüssel regelmäßig
- Setze ein kurzes Ablaufdatum für Tokens (z. B. 1–2 Stunden) und verwende Refresh Tokens bei Bedarf
- Aktiviere HTTPS, um das Abfangen von Tokens zu verhindern
- Protokolliere und melde fehlgeschlagene Token-Validierungsversuche
🔐 Optionale Erweiterungen
- Implementiere einen Refresh-Token-Mechanismus für langlebige Sitzungen
- Verwende HMAC oder HMAC + IP-Bindung, um Token-Wiederverwendung über Server hinweg zu verhindern
- Unterstütze eine JWT-Blacklist oder Token-Sperre nach Abmeldung oder Kompromittierung