Add local username/password login as fallback when Microsoft login isn't available
Neues "users"-Table (bcrypt-Hash, nie Klartext), POST /api/auth/login gibt ein selbst-signiertes JWT (HS256) aus. requireAuth unterscheidet MSAL- (RS256) und lokale Tokens (HS256) anhand des alg-Headers. Server legt beim Start optional ein erstes lokales Konto an, wenn SEED_ADMIN_USERNAME/SEED_ADMIN_PASSWORD als Stack-Env gesetzt sind (idempotent, Klartext-Passwort landet nie im Repo). Frontend: Login-Screen hat jetzt einen Alternativ-Link zu Benutzername/Passwort, App.tsx kombiniert MSAL- und lokalen Auth-Status. Temporärer test-build-only.yml Workflow zur Docker-Build-Verifikation ohne Registry-Push (wird nach dem Test wieder entfernt). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
7bdf4f2897
commit
97c4aa1c68
@@ -76,7 +76,12 @@ Auf `https://10.1.10.111:9443` (Zugang laut deploy-standard bei "dominic"):
|
||||
- Compose path: `gitops/stack.yml`
|
||||
- Authentication: `portainer-deploy` + dessen PAT (Org-Repos sind über das
|
||||
`deploy-read`-Team bereits abgedeckt, nichts zusätzlich einzutragen)
|
||||
- Environment-Variable setzen: `POSTGRES_PASSWORD` = ein zufälliges, sicheres Passwort
|
||||
- Environment-Variablen setzen:
|
||||
- `POSTGRES_PASSWORD` = ein zufälliges, sicheres Passwort
|
||||
- `JWT_SECRET` = ein zufälliger, langer String (signiert die lokalen Login-Tokens –
|
||||
niemals ins Repo, nur hier als Stack-Env). Beispiel zum Generieren: `openssl rand -base64 48`
|
||||
- `SEED_ADMIN_USERNAME` / `SEED_ADMIN_PASSWORD` = legt beim ersten Start automatisch
|
||||
ein lokales Fallback-Konto an (siehe "Lokales Konto" unten)
|
||||
- **Webhook aktivieren**, **ForceUpdate an**, `ForcePullImage` bleibt aus
|
||||
- Die angezeigte Webhook-URL (`.../api/stacks/webhooks/<uuid>`) als Gitea-Secret
|
||||
`PORTAINER_WEBHOOK_URL` eintragen (Schritt 2).
|
||||
@@ -90,6 +95,24 @@ Auf `https://10.1.10.111:9443` (Zugang laut deploy-standard bei "dominic"):
|
||||
- Cleanup-Rule für den Package-Owner einmalig setzen (Org/User → Settings → Packages →
|
||||
Cleanup Rules): keep most recent 10 + keep matching `^latest$`.
|
||||
|
||||
## Lokales Konto (Fallback ohne Microsoft-Login)
|
||||
|
||||
Auf dem Login-Screen gibt es unter dem Microsoft-Button den Link "Alternativ mit
|
||||
Benutzername anmelden". Damit das funktioniert, muss im Portainer-Stack `JWT_SECRET`
|
||||
gesetzt sein (Schritt 4).
|
||||
|
||||
Ein erstes Konto legt der Server **automatisch beim Start** an, wenn
|
||||
`SEED_ADMIN_USERNAME` und `SEED_ADMIN_PASSWORD` als Stack-Env gesetzt sind (idempotent –
|
||||
läuft bei jedem Neustart mit, legt aber nur an, was noch nicht existiert). Das
|
||||
Klartext-Passwort steht dabei nur in der Portainer-Stack-Konfiguration, nie im Git-Repo –
|
||||
der Server speichert ausschließlich einen bcrypt-Hash in der Datenbank.
|
||||
|
||||
Optional danach `SEED_ADMIN_PASSWORD` aus dem Stack wieder entfernen (Härtung), sobald
|
||||
das Konto einmal erfolgreich angelegt wurde – `SEED_ADMIN_USERNAME` kann stehen bleiben,
|
||||
ohne Passwort passiert dann nichts mehr. Weitere lokale Konten aktuell nur direkt in der
|
||||
Datenbank anlegbar (`INSERT INTO users …` mit einem bcrypt-Hash) – ein Verwaltungs-UI
|
||||
dafür gibt es noch nicht.
|
||||
|
||||
### Danach: zum Homescreen hinzufügen
|
||||
Seite im Handy-Browser öffnen, anmelden, "Zum Home-Bildschirm hinzufügen" (iOS Safari)
|
||||
bzw. "App installieren" (Android Chrome) – die App ist als PWA installierbar
|
||||
|
||||
Reference in New Issue
Block a user