Abmelden
Das Abmelden in Logto (als OIDC-Identitätsanbieter) umfasst sowohl:
- Eine zentralisierte Logto-Sitzung (Browser-Cookie unter der Logto-Domain) als auch
- Verteilten clientseitigen Auth-Status (Tokens und lokale App-Sitzung in jeder App).
Um das Abmeldeverhalten zu verstehen, hilft es, diese beiden Ebenen zu trennen und dann zu sehen, wie Grants sie verbinden.
Zentrale Konzepte
Was ist eine Logto-Sitzung?
Eine Logto-Sitzung ist der zentralisierte Anmeldestatus, der von Logto verwaltet wird. Sie wird nach erfolgreicher Authentifizierung erstellt und durch Cookies unter der Logto-Domain repräsentiert.
Wenn das Sitzungs-Cookie gültig ist, kann der Benutzer stillschweigend (SSO) über mehrere Apps hinweg authentifiziert werden, die demselben Logto-Tenant vertrauen.
Wenn keine gültige Sitzung existiert, zeigt Logto die Anmeldeseite an.
Was sind Grants?
Ein Grant repräsentiert den Autorisierungsstatus für eine bestimmte Kombination aus Benutzer + Client-Anwendung.
- Eine Logto-Sitzung kann Grants für mehrere Client-Apps haben.
- Ein Grant ist das, womit ausgegebene Tokens verknüpft sind.
- In dieser Dokumentation wird Grant als die bereichsübergreifende Autorisierungseinheit verwendet.
Wie hängen Sitzung, Grants und Client-Auth-Status zusammen?
- Logto-Sitzung steuert die zentralisierte SSO-Erfahrung.
- Lokale Client-Sitzung / Tokens steuern, ob jede App den Benutzer aktuell als angemeldet behandelt.
- Grants verbinden diese beiden Welten, indem sie den app-spezifischen Autorisierungsstatus repräsentieren.
Sign-in Rückblick (warum Sign-out mehrschichtig ist)
Sitzungs-Topologie über Apps / Geräte hinweg
Geteiltes Sitzungs-Cookie (gleicher Browser / User Agent)
Wenn sich ein Benutzer in mehreren Apps im selben Browser anmeldet, können diese Apps dasselbe Logto-Sitzungs-Cookie wiederverwenden und SSO-Verhalten gilt.
Isolierte Sitzungs-Cookies (verschiedene Geräte / Browser)
Verschiedene Browser / Geräte halten unterschiedliche Logto-Cookies, daher ist der Anmeldestatus isoliert.
Abmelde-Mechanismen
1) Nur clientseitiges Abmelden
Die Client-App löscht ihre eigene lokale Sitzung und Tokens (ID- / Zugangstoken / Auffrischungstoken). Dadurch wird der Benutzer nur aus dem lokalen Zustand dieser App abgemeldet.
- Die Logto-Sitzung kann weiterhin aktiv sein.
- Andere Apps unter derselben Logto-Sitzung können weiterhin SSO nutzen.
2) End-Sitzung bei Logto (globales Abmelden in aktueller Logto-Implementierung)
Um die zentralisierte Logto-Sitzung zu löschen, leitet die App den Benutzer zum End-Sitzung-Endpunkt weiter, zum Beispiel:
https://{your-logto-domain}/oidc/session/end
Im aktuellen Logto SDK-Verhalten:
signOut()leitet zu/session/endweiter.- Dann geht es zu
/session/end/confirm. - Das Standard-Bestätigungsformular sendet automatisch
logout=true.
Dadurch wird das aktuelle SDK-Abmelden als globales Abmelden behandelt.
Was passiert beim globalen Abmelden
Beim globalen Abmelden gilt:
- Die zentralisierte Logto-Sitzung wird widerrufen.
- Zugehörige App-Grants werden je nach Autorisierungsstatus der App behandelt:
- Wenn
offline_accessnicht gewährt ist, werden die zugehörigen Grants widerrufen. - Wenn
offline_accessgewährt ist, werden Grants durch End-Sitzung nicht widerrufen.
- Wenn
- Bei
offline_access-Fällen bleiben Auffrischungstoken und Grants bis zum Ablauf des Grants gültig.
Grant-Lebensdauer und Auswirkung von offline_access
- Die Standard-Grant-TTL in Logto beträgt 180 Tage.
- Wenn
offline_accessgewährt ist, wird der App-Grant durch End-Sitzung standardmäßig nicht widerrufen. - Die mit diesem Grant verknüpfte Auffrischungstoken-Kette kann weiterlaufen, bis der Grant abläuft (oder explizit widerrufen wird).
Föderiertes Abmelden: Back-Channel-Logout
Für bereichsübergreifende Konsistenz unterstützt Logto Back-Channel-Logout.
Wenn sich ein Benutzer von einer App abmeldet, kann Logto alle Apps, die an derselben Sitzung teilnehmen, benachrichtigen, indem ein Logout-Token an jede registrierte Back-Channel-Logout-URI gesendet wird.
Wenn Is session required in den Back-Channel-Einstellungen der App aktiviert ist, enthält das Logout-Token sid, um die Logto-Sitzung zu identifizieren.
Typischer Ablauf:
- Benutzer startet Abmelden in einer App.
- Logto verarbeitet End-Sitzung und sendet Logout-Token(s) an registrierte Back-Channel-Logout-URI(s).
- Jede App validiert das Logout-Token und löscht ihre eigene lokale Sitzung / Tokens.
Abmelde-Methoden in Logto SDKs
- SPA und Web:
client.signOut()löscht den lokalen Token-Speicher und leitet zum Logto-End-Sitzung-Endpunkt weiter. Du kannst eine Post-Logout-Redirect-URI angeben. - Native (einschließlich React Native / Flutter): löscht in der Regel nur den lokalen Token-Speicher. Sitzungslose Webviews bedeuten, dass kein persistentes Logto-Browser-Cookie gelöscht werden muss.
Für native Anwendungen, die keine sitzungslose Webview unterstützen oder die emphasized Einstellungen nicht erkennen (Android-App mit React Native oder Flutter SDK), kannst du den Benutzer zwingen, sich erneut anzumelden, indem du den Parameter prompt=login in der Authentifizierungsanfrage übergibst.
Erzwinge Re-Authentifizierung bei jedem Zugriff
Für sicherheitskritische Aktionen füge prompt=login in Auth-Anfragen ein, um SSO zu umgehen und jedes Mal die Eingabe der Zugangsdaten zu erzwingen.
Wenn du offline_access anforderst (um Auffrischungstoken zu erhalten), füge auch consent, prompt=login consent hinzu.
Typische kombinierte Einstellung:
prompt=login consent
FAQs
Ich erhalte keine Back-Channel-Logout-Benachrichtigungen.
- Stelle sicher, dass die Back-Channel-Logout-URI korrekt im Logto-Dashboard registriert ist.
- Stelle sicher, dass deine App einen aktiven Anmeldestatus für denselben Benutzer / Sitzungs-Kontext hat.
Verwandte Ressourcen
OIDC Back-Channel-Logout verstehen.