feat(oidc): SSO-Identitaet bewusst mit einem Konto verknuepfen
Bisher war eine SSO-Anmeldung ohne passendes Konto eine Sackgasse: rote Fehlermeldung, kein Weg weiter. Die Verknuepfung ging nur ueber LINK_BY_EMAIL, das der E-Mail-Verwaltung des Providers vertrauen muss. Jetzt endet der Callback bei einer besitzerlosen Identitaet nicht im Fehler, sondern parkt sie in einem kurzlebigen signierten HttpOnly-Cookie und leitet auf /?sso_link=1. Der Login-Screen bittet daraufhin einmalig um das Calendarr-Passwort; nach erfolgreichem Login loest der Client POST /api/auth/oidc/link-pending ein und die Identitaet haengt an genau dem Konto, das sich gerade ausgewiesen hat. Beide Haelften sind damit bewiesen — das ID-Token haben wir selbst geprueft, das Konto durch das Passwort — und die Vertrauensannahme ueber die E-Mail entfaellt. Das greift fuer alle drei Faelle, in denen eine gueltige Identitaet keinen Besitzer hat: kein Konto vorhanden, Selbstregistrierung aus, oder E-Mail bereits vergeben. Ausserdem: unbekannte Fehler-Slugs werden jetzt mit angezeigt statt hinter "Anmeldung fehlgeschlagen" zu verschwinden — genau die Information, die zur Diagnose fehlte. Und oidc_token_exchange_failed hat eine eigene Meldung, die auf Client-Typ und Redirect-URI hinweist, weil das der haeufigste Konfigurationsfehler ist. Sechs Tests dazu; Ablauf zusaetzlich im Browser gegen einen echten OIDC-Stub-Provider durchgespielt: Hinweis statt Fehler, Verknuepfung nach Passwort-Login, danach Anmeldung allein per SSO. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b560ee260c
commit
cc4daf4a84
@@ -32,6 +32,9 @@ const translations = {
|
||||
sso_err_email_not_verified: 'Die E-Mail-Adresse ist beim Anbieter nicht bestätigt',
|
||||
sso_err_no_email: 'Der Anbieter hat keine E-Mail-Adresse übermittelt',
|
||||
sso_err_state_mismatch: 'Sitzung abgelaufen, bitte erneut versuchen',
|
||||
sso_link_prompt: 'Dieses Authentik-Konto ist noch nicht verknüpft. Melde dich einmalig mit deinem Calendarr-Passwort an — danach genügt der SSO-Knopf.',
|
||||
sso_linked_toast: 'Konto mit {name} verknüpft',
|
||||
sso_err_token_exchange_failed: 'Der Anbieter hat den Anmeldecode abgelehnt — prüfe Client-Typ (Public) und Redirect-URI',
|
||||
sso_err_provider_unreachable: 'Anmeldedienst nicht erreichbar, bitte später erneut versuchen',
|
||||
sso_err_discovery_failed: 'Anmeldedienst antwortet nicht korrekt',
|
||||
sso_err_setup_required: 'Bitte zuerst das Administrator-Konto einrichten',
|
||||
@@ -836,6 +839,9 @@ const translations = {
|
||||
sso_err_email_not_verified: 'The email address is not verified at the provider',
|
||||
sso_err_no_email: 'The provider did not supply an email address',
|
||||
sso_err_state_mismatch: 'Session expired, please try again',
|
||||
sso_link_prompt: 'This Authentik account is not linked yet. Sign in once with your Calendarr password — after that the SSO button is enough.',
|
||||
sso_linked_toast: 'Account linked with {name}',
|
||||
sso_err_token_exchange_failed: 'The provider rejected the sign-in code — check the client type (public) and the redirect URI',
|
||||
sso_err_provider_unreachable: 'Sign-in service unreachable, please try again later',
|
||||
sso_err_discovery_failed: 'Sign-in service returned an invalid response',
|
||||
sso_err_setup_required: 'Please set up the administrator account first',
|
||||
|
||||
Reference in New Issue
Block a user