CodamAIDocs
Themafertig

Eine Person verlässt die Firma

Sperren, Rollen entziehen, Konto schließen: was sofort wirkt, was erst mit Ablauf des Tokens, und was mit ihren Daten und dem Audit passiert.

Ausprägungen
Rollen entziehenKonto sperrenKonto schließenes muss sofort gehendie Person kommt zurück

Worum es geht

Ben arbeitet für den Kunden nordbau und geht zum 30. September. Sein Zugang soll enden, seine Arbeit soll bleiben. Dafür gibt es drei Handgriffe, die verschiedene Dinge tun:

HandgriffWerNimmt
Rolle entziehenein Mandanten-Administrator oder ein Plattform-Administratorein einzelnes Recht
Konto sperrenein Plattform-Administratorjeden Zugang, umkehrbar
Konto schließenein Plattform-Administratorjeden Zugang, endgültig

Der Ablauf am 30. September

Vom Abschied bis zum geschlossenen Konto
  1. 1
    Admin→CIAS
    listet Bens Rollenvergaben: GET /cias/admin/role-assignments?userId=…
  2. 2
    Admin→CIAS
    entzieht jede davon einzeln: POST /cias/admin/role-assignments/{id}/revoke mit Grund
  3. 3
    CIAS→Keycloak
    trägt die Rolle aus, dann erst wird die Vergabe REVOKED
    Was Zugang nimmt, kommt zuerst. Scheitert der zweite Schritt, hat Ben die Rolle trotzdem nicht mehr.
  4. 4
    Admin→CIAS
    sperrt das Konto: POST /cias/admin/users/{id}/suspend mit Grund
  5. 5
    CIAS→Keycloak
    deaktiviert das Konto, dann erst wird der Datensatz SUSPENDED
  6. 6
    Admin→CIAS
    später, wenn nichts mehr offen ist: POST /cias/admin/users/{id}/close mit Grund
    Ergebnis: Datensatz CLOSED, Konto in Keycloak deaktiviert. Gelöscht wird nichts, und aus CLOSED führt kein Weg zurück.

Warum in dieser Reihenfolge? Sperren allein lässt alle Rollen stehen: Wird das Konto je wieder entsperrt, hat Ben dieselben Rechte wie vorher. Und Schließen ist endgültig, also kommt es zuletzt, wenn sicher ist, dass niemand mehr etwas mit dem Konto tun muss.

Was wirkt wann

gantt
    title Um 00:00 entzogen und gesperrt (Access-Token 5 Minuten)
    dateFormat mm:ss
    axisFormat %M:%S
    section Keycloak
    Rolle entfernt, Konto deaktiviert :milestone, k1, 00:00, 0s
    section Anmeldung
    keine Anmeldung, kein Refresh mehr :done, a1, 00:00, 5m
    section Altes Token
    Rolle steht noch im Token, Anfragen laufen :crit, t1, 00:00, 3m
    section Danach
    Token abgelaufen, kein neues :active, n1, 03:00, 2m
Was du änderstWirkt auf neue TokensWirkt auf das Token, das die Person schon hat
Rolle entzogensofort, die Rolle fehlt im nächsten Tokenerst mit dem nächsten Token, also spätestens mit dem Ablauf des Access-Tokens
befristete Vergabe läuft abnach dem nächsten Lauf des Zeitgebers, standardmäßig alle 5 Minutendann wie oben
Attributwert je Mandant entzogen–höchstens 30 Sekunden, denn dieser Wert steht nicht im Token
Konto gesperrt oder geschlossensofort: Keycloak stellt einem deaktivierten Konto kein Token mehr aus, auch keines beim Refreshgar nicht, es läuft normal ab
ganzer Mandant gesperrt–höchstens 30 Sekunden, danach wird jede Anfrage am Mandanten-Tor abgewiesen

Warum das so ist, steht unter Warum ein Rechteentzug verzögert wirkt: CIAS prüft bei jeder Anfrage nur Signatur und Ablauf des Tokens und fragt Keycloak nicht, ob die Rollen noch stimmen.

Welcher Handgriff für welchen Fall

Was willst du erreichen?
AnlassHandgriff und Wirkung
Ben wechselt die Abteilung und braucht ein Recht nicht mehrRolle entziehen. Wirkt mit dem nächsten Token
Ben ist in Elternzeit und kommt wiederKonto sperren. Später entsperren, die Rechte sind dann wieder da
Ben verlässt die FirmaRollen entziehen, Konto sperren, später schließen
Verdacht auf Missbrauch, es muss sofort aufhörenKonto sperren. Sofort kein neues Token; das laufende wartet man ab
Der ganze Kunde hört aufMandant sperren, siehe Ein Kunde kündigt

Was mit den Daten der Person passiert

Nach dem Schließen
Bleibt
überall
  • der Benutzerdatensatz in CIAS, mit Status CLOSED
  • das Konto in Keycloak, deaktiviert, samt Mitgliedschaft in der Organisation und in Gruppen
  • Rollenvergaben, die niemand entzogen hat
  • alle Zeilen in CDMS, die Ben angelegt oder geändert hat
  • die Historie: jede Revision mit Name, IP-Adresse und Browser
  • das CIAS-Audit: Revoked, Suspended, Closed, jeweils mit Grund
Geht
nur der Zugang
  • neue Anmeldung: unmöglich
  • Token erneuern: scheitert
  • jede Anfrage, sobald das letzte Token abgelaufen ist

Gelöscht wird nichts, und es gibt auch keinen Endpunkt dafür: weder für Benutzer noch für Mandanten. Der Grund liegt in den Daten selbst. In CDMS hängen Zeilen an der Person, und die Historie nennt sie; ein gelöschtes Konto ließe diese Verweise ins Leere zeigen, und ein Prüfer könnte später nicht mehr sagen, wer etwas getan hat.

Benutzer-Modelle sind Modelle, in denen jede Person nur ihre eigenen Zeilen sieht. Bens Zeilen dort bleiben ihm zugeordnet und sind für alle anderen unsichtbar, weil der Owner-Filter mit der eigenen ID arbeitet. Wer sie noch einmal ansehen muss, braucht einen Benutzerwechsel. Der gelingt nur, solange CIAS Ben als Person findet, er noch zum Mandanten nordbau gehört, über die Organisation oder seine Attribute tenant bzw. allowedTenants, und eine gültige Freigabe von Ben besteht. Sonst antwortet CIAS mit 403. Eine neue Freigabe kann Ben nach seinem Weggang nicht mehr erteilen. Wer sie einer anderen Person geben will, legt sie dort neu an.

Was im Audit steht

HandgriffEintragEnthält
Rolle entzogenAuthorizationEvent.RevokedVergabe, Person, Rolle, Mandant, Grund
befristete Rolle abgelaufenAuthorizationEvent.ExpiredVergabe, Person, Rolle, Mandant
Konto gesperrtUserEvent.SuspendedBenutzer-ID, Grund
Konto geschlossenUserEvent.ClosedBenutzer-ID, Grund

Der Grund ist bei allen dreien Pflicht. Er steht nicht am Datensatz, sondern im Ereignis und damit im Audit. Wer gehandelt hat, ergänzt das Audit aus dem Token der Anfrage. Kein Eintrag entsteht dagegen für eine Gruppenmitgliedschaft, die jemand beendet, und für Rollen, die es nur in der Keycloak-Konsole gibt. Siehe Welche Ereignisse protokolliert werden.

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-user – UserAdminController (suspend, reactivate, close; kein DELETE), UserService (suspend, close: erst Konto deaktivieren, dann Datensatz), User (suspend, close), UserStatus, UserEvent (Suspended, Closed)
  • CIAS/cias-iam-keycloak – KeycloakIdentityAdapter (enable, disable)
  • CIAS/cias-authorization – RoleAssignmentService.revoke (erst Keycloak, dann REVOKED), RoleAdminController (POST /cias/admin/role-assignments/{id}/revoke), AuthorizationEvent.Revoked, RoleSynchronizationScheduler (PT5M)
  • CIAS/cias-authentication – JwtDecoderUtil (nur Signatur und Ablauf), TenantGateProperties (ttl 30s), AttributeLookupProperties (ttl 30s)
  • CIAS/cias-audit – DomainEventAuditListener, AuditEntry
  • CDMS/cdms-persistence-database – AuditRevisionListener, AuditHistoryReader (kein Löschen von Revisionen); CDMS/cdms-system-layer – AbstractLayer (Owner-Filter über getUserId)
Suchen