CodamAIDocs
Themafertig

Abmelden

Wie die Abmeldung Cookies löscht, Keycloak die Sitzung beendet und die Login-Seite danach nicht sofort wieder anmeldet.

Ausprägungen
mit ID-Tokenohne ID-Token (Bestätigungsseite)ohne konfigurierten Keycloak (nur lokal)

Worum es geht

Abmelden heißt bei CodamAI zweierlei:

  1. Der BFF löscht seine Cookies. Damit hat der Browser keine Sitzung mehr bei der Oberfläche.
  2. 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

Drei Wege der Abmeldung

Wann: Der Normalfall. Die Sitzung enthält ein ID-Token.

  1. 1
    BFF→Keycloak
    leitet mit id_token_hint=<ID-Token> zu Keycloak
  2. 2
    Keycloak
    erkennt am ID-Token, wer sich abmeldet, und fragt nicht nach
  3. 3
    Keycloak→Browser
    springt zurück auf /login?loggedOut=1

Ergebnis: Abmeldung ohne Zwischenseite.

Wann: Die Sitzung hat kein ID-Token mehr, etwa weil sie schon kaputt war.

  1. 1
    BFF→Keycloak
    leitet nur mit client_id zu Keycloak
  2. 2
    Keycloak→Benutzer
    zeigt die Seite „Möchten Sie sich abmelden?“
  3. 3
    Benutzer→Keycloak
    bestätigt
  4. 4
    Keycloak→Browser
    springt 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:

CookieWofür
…session-token und seine Teile .0, .1, …die Sitzung mit den Tokens
…callback-urldas Rücksprungziel beim Login
…csrf-tokenSchutz der Login-Formulare
…pkce.code_verifier, …state, …nonceReste 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“.

Weiter

Quellen im Code und in der Wissensdatenbank
  • hub-frontend, CIAS/cias-frontend, CDMS/frontend – server/api/logout.get.ts, app/layouts/default.vue, app/pages/login.vue (loggedOut)
  • hub-login – theme/codamai/login/logout-confirm.ftl
Suchen