Admin Web Dashboard - Kontoregistrierung #2
Labels
No labels
blocked
claude
in-progress
needs-review
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
aiways/Backend#2
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Aktuell kann man sich auf der Backend Seite einfach ein Konto registrieren. Das sollte nicht möglich sein, da es auch keinen Verifizierung Prozess gibt, beim installieren des Backends sollte also ein Admin-Konto automatisch erstellt werden und neue Konten aus dem Web Dashboard nur über diesen Admin erstellt werden können.
Im weiteren Verlauf sollte es später einen Registrierungsprozess geben (to bei defined), der die Erstellung eines Kontos unter den richtigen Umständen ermöglicht.
Unabhängig davon sind endpoints des Backends aktuell über das Benutzerkonto verifiziert/authentifiziert. Es sollte einen API Key Mechanismus unabhängig vom Benutzerkonto geben
Umgesetzt in
d564dbe(release) — CI grün, deployt und live verifiziert.1. Registrierung zu
POST /auth/registerantwortet jetzt mit 403.ALLOW_REGISTRATION(Defaultfalse) öffnet die Route bewusst wieder, gedacht für lokale Entwicklung. Live geprüft:Im Dashboard ist die Registrieren-Ansicht weg — nur noch Login, mit dem Hinweis „Konten legt ein Administrator an."
2. Admin-Konto beim Installieren
Startet das Backend mit leerer
users-Tabelle, legt es genau ein Admin-Konto an (src/auth/bootstrap.ts):ADMIN_USERNAME(Defaultadmin),ADMIN_PASSWORD, optionalADMIN_EMAIL— alle in.env.exampleunddocker-compose.ymlergänzt.ADMIN_PASSWORDwird eines erzeugt und einmalig ins Server-Log geschrieben (docker compose logs backend). Ein gesetztesADMIN_PASSWORDtaucht nie im Log auf.Neu dazu:
POST /auth/password(eigenes Passwort ändern). Ohne das bliebe ein generiertes Bootstrap-Passwort dauerhaft im Log stehen.3. API-Keys, unabhängig vom Benutzerkonto
Neue Tabelle
api_keys— gespeichert wird nur der SHA-256-Hash, der Klartext (oaw_…) ist genau einmal bei der Erstellung sichtbar. Verwendung:DEVICE_TOKEN, damit der ESP-Kurier/die Bridge ohne Benutzerkonto auskommt./auth/me,/auth/password,/users,/api-keys): dort verlangt der Server einen echten Login. Auch ein Key mit Rolleadminkommt dort nicht durch — sonst könnte sich ein abgegriffener Key selbst weitere Schlüssel und Konten ausstellen.user/admin, optionales Ablaufdatum, sofort wirksamer Widerruf (markiert statt gelöscht, damit die Historie bleibt),last_used_atwird höchstens einmal pro Minute geschrieben.Entscheidungen (proceed-with-default)
scope-Wert am Key der saubere Weg.DEVICE_TOKENunverändert gelassen: ohne gesetztes Token bleibt Ingest offen wie bisher. Das ist streng genommen ein Loch, aber es zu schließen hätte jede Installation ohne Token still lahmgelegt. Stattdessen warnt der Server jetzt beim Start. Sag Bescheid, wenn ich das hart machen soll.created_bybei Commands ist bei API-Key-Requestsnullstatt eines erfundenen Nutzers.Verifikation
last_used_at.src/auth/selftest.ts— laufen in der CI mit.register→ 403,allowRegistration: false,/api-keys→ 401 statt 404, erfundener Key → 401, Ingest mit deinem echtenDEVICE_TOKENweiter 200, mit falschem 401, Dashboard enthält den API-Keys-Tab.Zwei Hinweise
GET /sandbox.jsonantwortet auf der Live-Instanz mit 200, d. h. dort istNODE_ENVnicht aufproductiongesetzt. Die Sandbox zeigt nur die Endpunktliste, keine Secrets — ich habe das deshalb nicht angefasst. Wenn sie draußen nicht erreichbar sein soll:NODE_ENV=productionin/opt/openaiways/.env.