feat: SSO-Login per OpenID Connect (Authentik u.a.)
Dritte Login-Methode neben Passwort und Passkey, konfiguriert über OIDC_ISSUER/OIDC_CLIENT_ID/OIDC_CLIENT_SECRET (optional, Button bleibt ohne diese Vars ausgeblendet). Authorization-Code-Flow mit PKCE, ID-Token-Signaturprüfung gegen das JWKS des Providers via neuer Abhängigkeit "jose" (RS256 fest gepinnt gegen Algorithm-Confusion), State/Nonce kurzlebig und einmalig verwendbar in neuer Tabelle oidc_states (Migration 0003, analog zu webauthn_challenges). Funktioniert ausschließlich für bereits angelegte Benutzer (Abgleich per E-Mail) – kein Auto-Provisioning, keine Rollenübernahme aus Claims, beides bleibt exklusiv über die bestehende Benutzerverwaltung steuerbar. app/login/page.tsx zu Server-Component-Wrapper reduziert (prüft isConfigured(), liest ?error= aus searchParams), bisheriger Inhalt nach components/LoginForm.tsx verschoben. Version 1.9.0. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -149,6 +149,32 @@ docker compose --env-file .env.local up -d
|
||||
werden im Kantinen-Bereich gepflegt.
|
||||
- Logo/Favicon/Farben unter „Design“ (nur Admin) anpassen.
|
||||
|
||||
## SSO/OpenID Connect (optional)
|
||||
|
||||
Zusätzlich zu Passwort und Passkey kann ein SSO-Login gegen einen
|
||||
beliebigen OpenID-Connect-Provider aktiviert werden (z. B. ein selbst
|
||||
gehostetes [Authentik](https://goauthentik.io/)). Dazu in `.env.local`
|
||||
setzen:
|
||||
|
||||
```bash
|
||||
OIDC_ISSUER=https://authentik.example.de/application/o/canteen-menu/
|
||||
OIDC_CLIENT_ID=<client-id-aus-authentik>
|
||||
OIDC_CLIENT_SECRET=<client-secret-aus-authentik>
|
||||
```
|
||||
|
||||
Beim Identity Provider als Redirect-URI hinterlegen:
|
||||
`<APP_URL>/api/auth/oidc/callback` (also z. B.
|
||||
`https://menu.example.de/api/auth/oidc/callback`).
|
||||
|
||||
**Wichtig:** SSO-Login funktioniert ausschließlich für E-Mail-Adressen,
|
||||
die bereits unter „Benutzer“ angelegt sind – es werden nie neue Konten
|
||||
angelegt, und die Rolle (Admin/Kantinenmitarbeiter) bleibt ausschließlich
|
||||
dort steuerbar. Ein Mitarbeiter muss also zuerst ganz normal als
|
||||
Benutzer angelegt werden, bevor er sich per SSO anmelden kann.
|
||||
|
||||
Ohne die drei Variablen bleibt der SSO-Button auf der Anmeldeseite
|
||||
einfach ausgeblendet, Passwort/Passkey funktionieren unverändert.
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
### `password authentication failed for user "postgres"` in den App-Logs
|
||||
|
||||
Reference in New Issue
Block a user