CodamAIDocs
Themafertig

Warum ein Rechteentzug verzögert wirkt

Entzogene Rechte stehen noch im Token, bis es abläuft oder der Tausch-Cache verfällt. Wie lange das dauert und wie man sofort sperrt.

Ausprägungen
Rolle entzogenAttributwert pro Mandant geändertMandant gesperrtKonto gesperrt

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:

WasWie lange höchstensEinstellung
das Access-Token selbstseine Laufzeit, bei Keycloak standardmäßig 5 MinutenRealm-Einstellung in Keycloak
das getauschte Token im Cachebis 10 Sekunden vor seinem Ablauf, höchstens 5 Minutencodamai.cias.token-exchange.ttl
das Mandanten-Tor („wird dieser Mandant bedient?“)30 Sekundencodamai.cias.tenant-gate.ttl
Attributwerte pro Mandant30 Sekundencodamai.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

Wie schnell welcher Entzug wirkt

Wann: Eine Rollenvergabe wird in CIAS entzogen oder läuft ab.

  1. 1
    CIAS→Keycloak
    entfernt die Rolle zuerst in Keycloak, dann im eigenen Datensatz
  2. 2
    Client→CIAS
    Anfragen mit dem alten Token tragen die Rolle noch
  3. 3
    BFF→Keycloak
    holt 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

Welcher Hebel wirkt wie schnell?
Was soll aufhören?Hebel und Wirkung
ein einzelnes Recht einer PersonRolle entziehen. Wirkt mit dem nächsten Token, höchstens einige Minuten
jeder Zugriff einer PersonKonto sperren. Kein neues Token mehr, das aktuelle läuft noch aus
jeder Zugriff eines ganzen KundenMandant sperren. Wirkt nach höchstens 30 Sekunden

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-authentication – JwtDecoderUtil (lokale Prüfung), TokenExchangeService, TokenExchangeProperties, TenantGate, TenantGateProperties, AttributeLookup, AttributeLookupProperties
  • CIAS/cias-iam-keycloak – KeycloakIdentityAdapter (disable)
  • CIAS/cias-authorization/docs/adr – ADR-034 (Schreibreihenfolge); CIAS/cias-kernel/docs/adr – ADR-022
  • CIAS/cias-runtime/deploy/keycloak/import/codamai-realm.json (keine eigenen Token-Laufzeiten)
Suchen