Skip to Content
CubyAuthentifizierung

Authentifizierung

Cuby unterstützt mehrere Authentifizierungsmethoden. Die Auth-Funktion wird über die Umgebungsvariable USE_AUTH aktiviert.

Methoden

MethodeVerwendungAblauf
API Key (Bearer)Server-zu-ServerAuthorization: Bearer {apiKey} Header
Session CookieBrowsercuby_session Cookie, 24h gültig, HttpOnly, SameSite=None
PostMessage Tokeniframe-EmbeddingKurzlebiger Token (60s), einmalige Verwendung

Auth-Endpunkte

MethodEndpunktBeschreibung
POST/api/authDirekter Login: API Key → Session Cookie
POST/api/auth/tokenToken erstellen: API Key → kurzlebiger Auth-Token (60s)
POST/api/auth/sessionToken einlösen: Auth-Token → Session Cookie

Öffentliche Endpunkte (kein Auth nötig)

  • /api/health
  • /api/auth/*

Alle anderen Endpunkte sind geschützt, wenn USE_AUTH aktiviert ist.

Bearer-Authentifizierung

Für Server-zu-Server-Kommunikation wird der API Key als Bearer Token mitgesendet:

curl -H "Authorization: Bearer DEIN_API_KEY" http://localhost:3847/api/config

Session-Authentifizierung

Für Browser-Zugriff wird der API Key einmalig gegen ein Session Cookie getauscht:

# Login → Session Cookie erhalten curl -X POST http://localhost:3847/api/auth \ -H "Content-Type: application/json" \ -d '{"apiKey": "DEIN_API_KEY"}' \ -c cookies.txt # Weitere Requests mit Cookie curl http://localhost:3847/api/config -b cookies.txt

Das Cookie cuby_session ist:

  • 24 Stunden gültig
  • HttpOnly — nicht per JavaScript auslesbar
  • SameSite=None — ermöglicht Cross-Origin-Zugriff für iframe-Embedding

PostMessage-Authentifizierung

Für die Studio-Integration wird ein zweistufiger Token-Austausch über window.postMessage verwendet:

  1. Studio ruft POST /api/auth/token mit apiKey auf → erhält kurzlebigen Token
  2. Studio sendet window.postMessage({type: 'cuby:auth', token}) an das iframe
  3. iframe-Hook empfängt Token → POST /api/auth/session
  4. Server setzt cuby_session Cookie → alle weiteren Requests sind authentifiziert

Socket.IO-Authentifizierung

Socket.IO-Verbindungen werden über zwei Wege authentifiziert:

  • socket.handshake.auth.apiKey — API Key direkt im Handshake
  • Cookie cuby_session — Bestehende Browser-Session

Die Auth-Middleware wird automatisch auf Plugin-Namespaces (/plugins/<instanceId>) angewandt.

// Client-Beispiel const socket = io('http://localhost:3847', { auth: { apiKey: 'DEIN_API_KEY' } });

Sicherheitsmerkmale

MerkmalBeschreibung
Timing-safe VergleichAPI-Key-Validierung mit crypto.timingSafeEqual
Einmal-TokenAuth-Tokens sind nach einmaliger Verwendung ungültig
HttpOnly CookiesSession-Cookies nicht per JavaScript auslesbar
SameSite=NoneErmöglicht Cross-Origin-Zugriff für iframe-Embedding
UUID v4 FormatAPI Keys müssen dem UUID v4 Format entsprechen

Weiterführend