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:
| Handgriff | Wer | Nimmt |
|---|---|---|
| Rolle entziehen | ein Mandanten-Administrator oder ein Plattform-Administrator | ein einzelnes Recht |
| Konto sperren | ein Plattform-Administrator | jeden Zugang, umkehrbar |
| Konto schließen | ein Plattform-Administrator | jeden Zugang, endgültig |
Der Ablauf am 30. September
-
1Admin→CIASlistet Bens Rollenvergaben:
GET /cias/admin/role-assignments?userId=… -
2Admin→CIASentzieht jede davon einzeln:
POST /cias/admin/role-assignments/{id}/revokemit Grund -
3CIAS→Keycloakträgt die Rolle aus, dann erst wird die Vergabe
REVOKEDWas Zugang nimmt, kommt zuerst. Scheitert der zweite Schritt, hat Ben die Rolle trotzdem nicht mehr. -
4Admin→CIASsperrt das Konto:
POST /cias/admin/users/{id}/suspendmit Grund -
5CIAS→Keycloakdeaktiviert das Konto, dann erst wird der Datensatz
SUSPENDED -
6Admin→CIASspäter, wenn nichts mehr offen ist:
POST /cias/admin/users/{id}/closemit GrundErgebnis: DatensatzCLOSED, Konto in Keycloak deaktiviert. Gelöscht wird nichts, und ausCLOSEDfü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 änderst | Wirkt auf neue Tokens | Wirkt auf das Token, das die Person schon hat |
|---|---|---|
| Rolle entzogen | sofort, die Rolle fehlt im nächsten Token | erst mit dem nächsten Token, also spätestens mit dem Ablauf des Access-Tokens |
| befristete Vergabe läuft ab | nach dem nächsten Lauf des Zeitgebers, standardmäßig alle 5 Minuten | dann wie oben |
| Attributwert je Mandant entzogen | – | höchstens 30 Sekunden, denn dieser Wert steht nicht im Token |
| Konto gesperrt oder geschlossen | sofort: Keycloak stellt einem deaktivierten Konto kein Token mehr aus, auch keines beim Refresh | gar 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
| Anlass | Handgriff und Wirkung |
|---|---|
| Ben wechselt die Abteilung und braucht ein Recht nicht mehr | Rolle entziehen. Wirkt mit dem nächsten Token |
| Ben ist in Elternzeit und kommt wieder | Konto sperren. Später entsperren, die Rechte sind dann wieder da |
| Ben verlässt die Firma | Rollen entziehen, Konto sperren, später schließen |
| Verdacht auf Missbrauch, es muss sofort aufhören | Konto sperren. Sofort kein neues Token; das laufende wartet man ab |
| Der ganze Kunde hört auf | Mandant sperren, siehe Ein Kunde kündigt |
Was mit den Daten der Person passiert
- 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
- 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
| Handgriff | Eintrag | Enthält |
|---|---|---|
| Rolle entzogen | AuthorizationEvent.Revoked | Vergabe, Person, Rolle, Mandant, Grund |
| befristete Rolle abgelaufen | AuthorizationEvent.Expired | Vergabe, Person, Rolle, Mandant |
| Konto gesperrt | UserEvent.Suspended | Benutzer-ID, Grund |
| Konto geschlossen | UserEvent.Closed | Benutzer-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.