MagicTradeBot API-Authentifizierung und Zugriffskontrolle

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 oder instanceId 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

📎 Related Topics