Worum es geht
Wenn du jemandem in CIAS eine Rolle entziehst, schreibt CIAS das sofort nach Keycloak. Trotzdem kann die Person noch ein paar Minuten weiterarbeiten wie vorher. Das ist kein Fehler, sondern folgt aus der Art, wie Tokens funktionieren.
Der Grund für dieses Verfahren: Müsste jede Anfrage Keycloak fragen, wäre jede Anfrage langsamer und jeder kurze Ausfall von Keycloak ein Ausfall aller Anwendungen.
Die Zwischenspeicher
Drei Stellen halten eine Antwort eine Weile fest:
| Was | Wie lange höchstens | Einstellung |
|---|---|---|
| das Access-Token selbst | seine Laufzeit, bei Keycloak standardmäßig 5 Minuten | Realm-Einstellung in Keycloak |
| das getauschte Token im Cache | bis 10 Sekunden vor seinem Ablauf, höchstens 5 Minuten | codamai.cias.token-exchange.ttl |
| das Mandanten-Tor („wird dieser Mandant bedient?“) | 30 Sekunden | codamai.cias.tenant-gate.ttl |
| Attributwerte pro Mandant | 30 Sekunden | codamai.cias.attribute-lookup.ttl |
Das getauschte Token kann nicht länger leben als das Token, das der Client schickt: Ist das abgelaufen, endet die Anfrage schon vorher mit 401. Praktisch wirkt ein Rollenentzug also spätestens, wenn das aktuelle Access-Token abläuft und der BFF ein neues holt.
Der Zeitstrahl
gantt
title Rolle um 00:00 entzogen (Access-Token 5 Minuten)
dateFormat mm:ss
axisFormat %M:%S
section Keycloak
Rolle am Konto entfernt :milestone, k1, 00:00, 0s
section Altes Token
Rolle steht noch im Token :crit, a1, 00:00, 3m
section BFF
Refresh, neues Token ohne Rolle :milestone, r1, 03:00, 0s
section Anfragen
Rolle wirkt nicht mehr :done, n1, 03:00, 2m
Im Beispiel war das alte Token noch knapp 4,5 Minuten gültig. Der BFF erneuert 90 Sekunden vor Ablauf, also nach 3 Minuten. Ab dann fehlt die Rolle.
Die Ausprägungen
Wann: Eine Rollenvergabe wird in CIAS entzogen oder läuft ab.
-
1CIAS→Keycloakentfernt die Rolle zuerst in Keycloak, dann im eigenen Datensatz
-
2Client→CIASAnfragen mit dem alten Token tragen die Rolle noch
-
3BFF→Keycloakholt beim nächsten Refresh ein neues Token, ohne die Rolle
Ergebnis: Wirkt spätestens mit Ablauf des aktuellen Access-Tokens, bei den Standardwerten nach höchstens 5 Minuten.
Wann: Ein Wert wie projects wird für eine Person in einem Mandanten geändert.
Diese Werte stehen nicht im Token, CIAS fragt sie bei jeder Anfrage nach. Die Antwort wird 30 Sekunden gemerkt. Attribute, die im Profil in Keycloak stehen, wirken dagegen wie Rollen erst mit dem nächsten Token.
Ergebnis: Wirkt nach höchstens 30 Sekunden.
Wann: Ein Mandant wird gesperrt, geschlossen oder seine Gültigkeit endet.
Das Mandanten-Tor merkt sich seine Antwort 30 Sekunden. Danach fragt es neu und lehnt jede Anfrage in diesem Mandanten mit 403 cias.authentication.tenant-not-served ab, egal welche Rollen im Token stehen.
Ergebnis: Wirkt nach höchstens 30 Sekunden, für alle Personen im Mandanten.
Wann: Eine Person wird in CIAS gesperrt.
CIAS deaktiviert das Konto in Keycloak. Keycloak stellt einem deaktivierten Konto keine neuen Tokens aus, der nächste Refresh scheitert und die Person muss sich neu anmelden, was ebenfalls scheitert. Das Access-Token, das sie gerade hat, bleibt bis zu seinem Ablauf gültig.
Ergebnis: Wirkt spätestens mit Ablauf des aktuellen Access-Tokens.
Wenn es schnell gehen muss
| Was soll aufhören? | Hebel und Wirkung |
|---|---|
| ein einzelnes Recht einer Person | Rolle entziehen. Wirkt mit dem nächsten Token, höchstens einige Minuten |
| jeder Zugriff einer Person | Konto sperren. Kein neues Token mehr, das aktuelle läuft noch aus |
| jeder Zugriff eines ganzen Kunden | Mandant sperren. Wirkt nach höchstens 30 Sekunden |