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:
@@ -46,12 +46,18 @@ const de = {
|
||||
submit: "Anmelden",
|
||||
or: "oder",
|
||||
passkeyButton: "Mit Passkey anmelden",
|
||||
ssoButton: "Mit Single Sign-On anmelden",
|
||||
backToMenu: "← Zur Speisekarte",
|
||||
errorInvalidCredentials: "E-Mail-Adresse oder Passwort ist falsch.",
|
||||
errorPasskeyCancelled: "Passkey-Anmeldung wurde abgebrochen.",
|
||||
errorGeneric: "Anmeldung fehlgeschlagen: {message}",
|
||||
errorPasswordDisabled:
|
||||
"Die Anmeldung mit Passwort ist für dieses Konto deaktiviert. Bitte mit Passkey anmelden.",
|
||||
errorOidcInvalidState:
|
||||
"Die SSO-Anmeldung ist abgelaufen oder ungültig. Bitte erneut versuchen.",
|
||||
errorOidcUnknownUser:
|
||||
"Für diese E-Mail-Adresse existiert kein Konto. Bitte an die Verwaltung wenden.",
|
||||
errorOidcFailed: "SSO-Anmeldung fehlgeschlagen. Bitte erneut versuchen.",
|
||||
},
|
||||
publicMenu: {
|
||||
prevWeek: "← Vorherige Woche",
|
||||
@@ -333,12 +339,17 @@ const en: Dict = {
|
||||
submit: "Log in",
|
||||
or: "or",
|
||||
passkeyButton: "Sign in with passkey",
|
||||
ssoButton: "Sign in with Single Sign-On",
|
||||
backToMenu: "← Back to menu",
|
||||
errorInvalidCredentials: "Email address or password is incorrect.",
|
||||
errorPasskeyCancelled: "Passkey sign-in was cancelled.",
|
||||
errorGeneric: "Sign-in failed: {message}",
|
||||
errorPasswordDisabled:
|
||||
"Password sign-in is disabled for this account. Please sign in with a passkey.",
|
||||
errorOidcInvalidState: "The SSO sign-in expired or was invalid. Please try again.",
|
||||
errorOidcUnknownUser:
|
||||
"No account exists for this email address. Please contact your administrator.",
|
||||
errorOidcFailed: "SSO sign-in failed. Please try again.",
|
||||
},
|
||||
publicMenu: {
|
||||
prevWeek: "← Previous week",
|
||||
@@ -618,12 +629,18 @@ const pl: Dict = {
|
||||
submit: "Zaloguj się",
|
||||
or: "lub",
|
||||
passkeyButton: "Zaloguj się kluczem dostępu",
|
||||
ssoButton: "Zaloguj się przez Single Sign-On",
|
||||
backToMenu: "← Powrót do jadłospisu",
|
||||
errorInvalidCredentials: "Nieprawidłowy adres e-mail lub hasło.",
|
||||
errorPasskeyCancelled: "Logowanie kluczem dostępu zostało anulowane.",
|
||||
errorGeneric: "Logowanie nie powiodło się: {message}",
|
||||
errorPasswordDisabled:
|
||||
"Logowanie hasłem jest wyłączone dla tego konta. Zaloguj się kluczem dostępu.",
|
||||
errorOidcInvalidState:
|
||||
"Logowanie SSO wygasło lub jest nieprawidłowe. Spróbuj ponownie.",
|
||||
errorOidcUnknownUser:
|
||||
"Nie istnieje konto dla tego adresu e-mail. Skontaktuj się z administracją.",
|
||||
errorOidcFailed: "Logowanie SSO nie powiodło się. Spróbuj ponownie.",
|
||||
},
|
||||
publicMenu: {
|
||||
prevWeek: "← Poprzedni tydzień",
|
||||
|
||||
Reference in New Issue
Block a user