Authentifizierung

API-Keys generieren und Anfragen authentifizieren.

Zuletzt aktualisiert: 2025-01-01

Authentifizierung

Alle API-Anfragen werden per JWT-Token authentifiziert. Es gibt zwei separate Authentifizierungssysteme: eines für Admin-Benutzer und eines für Kunden (Endkäufer).

Admin-Authentifizierung

Admin-Routen unter /api2/admin/* sind durch JWT-Cookies geschützt.

Anmeldung

POST /api2/admin/login
Content-Type: application/json

{
  "email": "[email protected]",
  "password": "IhrPasswort"
}

Bei erfolgreicher Anmeldung werden zwei HttpOnly-Cookies gesetzt:

CookieGültigkeitBeschreibung
admin_auth_token4 StundenZugriffs-Token für API-Anfragen
admin_refresh_token7 TageToken zur automatischen Token-Erneuerung

Token-Erneuerung

POST /api2/admin/refresh

Erneuert den admin_auth_token automatisch, solange der admin_refresh_token gültig ist. Wird vom Frontend automatisch aufgerufen.

Ausloggen

POST /api2/admin/logout

Löscht beide Auth-Cookies serverseitig.

Berechtigungen (RBAC)

Das System verwendet rollenbasierte Zugriffskontrolle mit 6 Rollen:

RolleBeschreibung
super_adminVollzugriff auf alle Funktionen
adminVollzugriff auf Shop-Verwaltung
managerBestellungen, Produkte, Kunden
editorProdukte und Inhalte bearbeiten
supportNur-Lese-Zugriff auf Bestellungen und Kunden
viewerNur-Lese-Zugriff auf alle Bereiche

CSRF-Schutz

Mutationen (POST, PUT, PATCH, DELETE) erfordern einen CSRF-Token. Dieser wird als X-CSRF-Token-Header mitgesendet:

POST /api2/admin/products
X-CSRF-Token: <csrf-token>
Content-Type: application/json

Den CSRF-Token erhalten Sie aus dem /api2/admin/me-Endpunkt. GET-Anfragen benötigen keinen CSRF-Token.


Kunden-Authentifizierung

Für Endkunden (Käufer) gibt es ein separates Auth-System unter /api2/auth/.

Registrierung

POST /api2/auth/register
Content-Type: application/json

{
  "email": "[email protected]",
  "password": "SicheresPasswort1",
  "firstName": "Max",
  "lastName": "Mustermann"
}

Antwort (201):

{
  "needsVerification": true,
  "message": "Bitte bestätigen Sie Ihre E-Mail-Adresse."
}

Passwortanforderungen: 8–128 Zeichen, mind. 1 Großbuchstabe, 1 Kleinbuchstabe, 1 Ziffer.

E-Mail-Verifizierung

GET /api2/auth/verify?token=<verification-token>
AntwortBedeutung
200 { verified: true }Erfolgreich verifiziert
200 { alreadyVerified: true }Bereits verifiziert (idempotent)
400Ungültiger oder abgelaufener Token

Anmeldung

POST /api2/auth/login
Content-Type: application/json

{
  "email": "[email protected]",
  "password": "SicheresPasswort1"
}

Bei Erfolg wird ein auth_token-Cookie gesetzt (HttpOnly, 24 Stunden). Nicht-verifizierte Konten erhalten 403 mit { needsVerification: true }.

Aktuelle Session abrufen

GET /api2/auth/me

Gibt die Daten des aktuell eingeloggten Kunden zurück (aus dem auth_token-Cookie).

Ausloggen

POST /api2/auth/logout

Löscht das auth_token-Cookie.


Fehlerantworten

Alle API-Endpunkte geben standardisierte Fehlerantworten zurück:

{
  "error": "Fehlermeldung",
  "code": "ERROR_CODE"
}
HTTP-StatusBedeutung
400Ungültige Anfrage / Validierungsfehler
401Nicht authentifiziert
403Keine Berechtigung für diese Aktion
404Ressource nicht gefunden
429Zu viele Anfragen (Rate Limit erreicht)
500Interner Serverfehler

Rate Limiting

Auth-Endpunkte sind zusätzlich rate-limitiert, um Brute-Force-Angriffe zu verhindern. Nach mehreren fehlgeschlagenen Versuchen werden weitere Anfragen temporär blockiert.

Siehe Rate Limiting für Details.