Authentifizierung

Zwei Zugangsarten — ein API-Schlüssel für Maschinen, eine Sitzung für die Konsole — und die Regeln, die beide trennen.

Zwei Arten von Zugangsdaten

Die API nimmt einen API-Schlüssel. Die Konsole nimmt ein Sitzungs-Cookie. Sie sind nicht austauschbar, und die API setzt das durch, statt bei jeder Anfrage neu zu entscheiden, ob ein Cookie dort hingehört.

Ein angemeldeter Browser kann die API nicht aufrufen

Eine Anfrage, die mit einem Sitzungs-Cookie authentifiziert wird, erhält 403 api_key_required mit einem Verweis auf die Schlüsselseite der Konsole. Das ist Absicht: Ohne cookie-authentifizierten Weg in die API gibt es nichts, was eine siteübergreifende Anfrage fälschen könnte.

Der Header

Senden Sie den Schlüssel als Bearer-Token. Ein Schlüssel besteht aus Präfix, Punkt und Geheimnis; das Präfix identifiziert die Zeile, deshalb wirkt ein Widerruf sofort und kostet einen Nachschlag.

curl https://api.llmeu.com/v1/chat/completions \
  -H "Authorization: Bearer llmeu_live_xxxxxxxx.your-secret" \
  -H "Content-Type: application/json" \
  -d '{"model":"llmeu-auto","messages":[{"role":"user","content":"Hello"}]}'

Berechtigungen (Scopes)

Ein Schlüssel trägt einen oder mehrere Scopes. Fehlt dem Schlüssel der Scope, den ein Endpunkt verlangt, wird die Anfrage mit 403 insufficient_scope abgelehnt — bevor der Body gelesen wird.

Scope Erlaubt
inference Chat Completions, Embeddings sowie Modellliste und Modelldetail.
platform_read Die Organisation lesen: Profil, Schlüssel, Verbrauch, Traces und Richtlinien.
platform_write Schlüssel anlegen und widerrufen sowie Richtlinien anlegen und ändern. Dieser Scope verschiebt Zuständigkeiten — vergeben Sie ihn bewusst.

Scopes werden pro Endpunkt geprüft, nicht pro Schlüssel. Ein Schlüssel mit platform_read kann im Playground kein Guthaben verbrauchen.

Einen Schlüssel anlegen

In der Konsole oder über die Plattform-API mit einem Schlüssel, der bereits platform_write trägt. Das Geheimnis wird einmal angezeigt, beim Anlegen: Gespeichert wird nur ein scrypt-Hash, niemand — auch wir nicht — kann es zurücklesen.

curl -X POST https://api.llmeu.com/platform/v1/api-keys \
  -H "Authorization: Bearer llmeu_live_xxxxxxxx.a-platform-write-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"ci","scopes":["inference"]}'

Verwaltende Aktionen in der Konsole — Richtlinien, Team, Einstellungen, Guthaben, Schlüssel widerrufen — sind nur für owner oder admin möglich, unabhängig von den Scopes eines Schlüssels.

Widerruf, und was ein Schlüssel nicht ist

Ein Schlüssel gehört einer Organisation, und die Organisation wird aus dem Schlüssel selbst ermittelt — nie aus einem Feld im Anfrage-Body, damit niemand durch höfliches Fragen an eine andere Organisation gerät. Ein Widerruf wirkt bei der nächsten Anfrage. Rotation heißt: zweiten Schlüssel anlegen, Verkehr umstellen, ersten widerrufen; eine Überlappungszeit gibt es nicht zu konfigurieren.

Stattdessen für die Konsole

Anmeldung, Passwort-Wiederherstellung und Adressbestätigung sind bei der Konsole dokumentiert. Es gibt kein OAuth, kein SAML und kein persönliches Zugriffstoken: Die Konsole nutzt ein Sitzungs-Cookie, die API nutzt Schlüssel.