Worum es geht
Abmelden heißt bei CodamAI zweierlei:
- Der BFF löscht seine Cookies. Damit hat der Browser keine Sitzung mehr bei der Oberfläche.
- Keycloak beendet seine Sitzung. Sonst würde der nächste Login ohne Passwort durchgehen, weil Keycloak die Person noch kennt.
Der Ablauf
sequenceDiagram
participant B as Browser
participant F as BFF
participant K as Keycloak
B->>F: GET /api/logout (ganzer Seitenwechsel)
F->>F: liest das ID-Token aus dem Cookie
F->>F: löscht alle Sitzungs-Cookies
F-->>B: Weiterleitung zu Keycloak /logout<br/>mit id_token_hint und Rücksprungadresse
B->>K: /protocol/openid-connect/logout
K->>K: beendet die Keycloak-Sitzung
K-->>B: Weiterleitung zu /login?loggedOut=1
B->>F: /login?loggedOut=1
F-->>B: Login-Seite, kein automatischer Login
Der Knopf „Abmelden“ ist ein normaler Link auf /api/logout, keine Skript-Aktion. Nur so kann der Server die httpOnly-Cookies löschen und den Browser zu Keycloak schicken.
Die Rücksprungadresse nach dem Abmelden heißt post_logout_redirect_uri. Standard ist /login?loggedOut=1 der eigenen Oberfläche, einstellbar über NUXT_AUTH_POST_LOGOUT_REDIRECT. Keycloak akzeptiert sie nur, wenn sie am Client unter „Valid post logout redirect URIs“ eingetragen ist.
Die Varianten
Wann: Der Normalfall. Die Sitzung enthält ein ID-Token.
-
1BFF→Keycloakleitet mit
id_token_hint=<ID-Token>zu Keycloak -
2Keycloakerkennt am ID-Token, wer sich abmeldet, und fragt nicht nach
-
3Keycloak→Browserspringt zurück auf
/login?loggedOut=1
Ergebnis: Abmeldung ohne Zwischenseite.
Wann: Die Sitzung hat kein ID-Token mehr, etwa weil sie schon kaputt war.
-
1BFF→Keycloakleitet nur mit
client_idzu Keycloak -
2Keycloak→Benutzerzeigt die Seite „Möchten Sie sich abmelden?“
-
3Benutzer→Keycloakbestätigt
-
4Keycloak→Browserspringt zurück auf
/login?loggedOut=1
Ergebnis: Abmeldung mit Bestätigungsseite. Ohne ID-Token kann Keycloak nicht sicher sein, dass die Abmeldung gewollt ist.
Wann: Im Portal ist keine Keycloak-Adresse eingestellt.
Der BFF löscht nur seine Cookies und leitet direkt auf /login?loggedOut=1.
Ergebnis: Nur lokal abgemeldet.
Was gelöscht wird
Der BFF liest das ID-Token bevor er löscht, denn danach ist es weg. Dann löscht er jedes Cookie, dessen Name mit dem Präfix des Portals beginnt, auch mit __Secure- oder __Host- davor:
| Cookie | Wofür |
|---|---|
…session-token und seine Teile .0, .1, … | die Sitzung mit den Tokens |
…callback-url | das Rücksprungziel beim Login |
…csrf-token | Schutz der Login-Formulare |
…pkce.code_verifier, …state, …nonce | Reste einer angefangenen Anmeldung |
Das Präfix ist next-auth im Hub und im CDMS-Portal, cias-auth im CIAS-Portal. Siehe Sitzung im BFF und Cookies.
Warum nicht sofort wieder angemeldet wird
Die Login-Seite meldet normalerweise automatisch an. Direkt nach dem Abmelden wäre das falsch. Der Parameter loggedOut in der Adresse schaltet den automatischen Login ab. Die Seite zeigt dann nur den Knopf „Anmelden“.