Etappe 5: Verlauf mit Filtern, Wiederholen und Aufräumen; Benutzerverwaltung, Passwort, Audit-Log; OIDC. Refs #014, #015, #016 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.5 KiB
Markdown
29 lines
1.5 KiB
Markdown
# #016 Anmeldung per OIDC
|
||
**Status:** erledigt
|
||
**Meilenstein:** v0.5.0
|
||
**Labels:** feature, sicherheit
|
||
**Geschätzt:** 4 h **Tatsächlich:** 0 h 08 min
|
||
|
||
## Ziel
|
||
Optionale OIDC-Anmeldung (z. B. authentik), Rollen über Gruppen-Claim.
|
||
|
||
## Aufgaben
|
||
- [x] openid-client 6.8.8 mit PKCE, State, Nonce, Discovery; Gruppen → Rolle bei jeder Anmeldung; Konto-Verknüpfung aus den Einstellungen
|
||
- [x] Anmeldeseite mit „Mit … anmelden“ und verständlichen Fehlermeldungen (`?sso=…`)
|
||
|
||
## Akzeptanzkriterien
|
||
- [x] Tests gegen einen Mock-IdP (`tests/oidc-mock.ts`): Anlegen, Rollenwechsel, keine Gruppe, keine Übernahme per Name, Verknüpfen, gesperrt, gefälschter State, fehlendes Cookie, falsche Nonce, fremde Audience – echter IdP beim Feldtest (#020)
|
||
|
||
## Abhängigkeiten
|
||
#015
|
||
|
||
## Notizen / Entscheidungen
|
||
- **Keine automatische Übernahme lokaler Konten über den Namen** – sonst übernähme, wer beim IdP
|
||
„admin“ heißt, den lokalen Admin. Bei Namensgleichheit bekommt das SSO-Konto „name-2“.
|
||
- **IdP maßgeblich für die Rolle:** bei jeder Anmeldung aus den Gruppen; Wechsel kommt ins Audit-Log.
|
||
- Ablaufzustand (Verifier, State, Nonce, Ziel) in einem kurzlebigen signierten Cookie
|
||
(`pd_oidc`, 10 min, nur `/api/v1/auth/oidc`, SameSite=Lax) statt in der Datenbank.
|
||
- `redirect_uri` und die Rückruf-URL werden aus `APP_URL` gebildet – hinter dem Reverse-Proxy
|
||
trägt die Anfrage den internen Host.
|
||
- Client-Anmeldung `client_secret_post` (Standard von openid-client); authentik und Keycloak können beides.
|