# #016 Anmeldung per OIDC **Status:** erledigt **Meilenstein:** v0.5.0 **Labels:** feature, sicherheit **Geschätzt:** 4 h **Tatsächlich:** – ## 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.