CodamAIDocs
Themafertig

Eine Rolle entziehen

Was beim Entziehen passiert, in welcher Reihenfolge, und wann es im Token ankommt.

Ausprägungen
aktive Vergabegeplante Vergabeschon entzogenabgelaufen → 409Rolle in der Organisation

Worum es geht

Eine Rolle entziehen heißt: Eine Vergabe endet, bevor ihre Zeit abgelaufen ist. Du entziehst immer eine bestimmte Vergabe, erkennbar an ihrer ID, nicht „die Rolle tenant-user von Anna“. Die ID findest du in der Liste der Vergaben einer Person oder eines Mandanten, siehe Eine Rolle vergeben.

Der Aufruf

Anfrage
POST /cias/admin/role-assignments/a41f…/revoke
Authorization: Bearer <Token von Anna, tenant-admin in nordbau>
{ "reason": "hat die Abteilung gewechselt" }
Antwort
HTTP 200
{ "id": "a41f…", "roleKey": "tenant-user", "tenantKey": "nordbau",
  "state": "REVOKED", … }

Der Grund ist Pflicht. Fehlt er, antwortet CIAS mit 400. Er landet im Event Revoked und damit im Audit.

Wer entziehen darf

Entziehen folgt denselben Regeln wie Vergeben:

  • Ein Plattform-Administrator darf jede Vergabe entziehen.
  • Alle anderen nur eine Vergabe einer Mandantenrolle, die an eine ihrer Rollen delegiert ist, im eigenen Mandanten, und nur, wenn sie die Rolle dort selbst halten.

Wer eine Rolle nicht vergeben dürfte, darf sie auch nicht entziehen: 403 cias.authorization.denied. Eine stillgelegte Rolle lässt sich dagegen noch entziehen, nur nicht mehr vergeben.

Der Ablauf

sequenceDiagram
    participant A as Anna
    participant C as CIAS
    participant K as Keycloak
    participant DB as CIAS-Datenbank
    A->>C: POST …/a41f…/revoke {reason}
    C->>C: Vergabe laden, Rechte prüfen
    C->>K: Person verlässt Gruppe cias-backend:tenant-user in nordbau
    C->>DB: Vergabe := REVOKED
    C-->>A: 200, Event Revoked

Die Reihenfolge ist die umgekehrte wie beim Vergeben. Die Regel dahinter ist dieselbe: Was Zugang nimmt, kommt zuerst, was Zugang gibt, kommt zuletzt. Egal welche Hälfte scheitert, die Person steht am Ende eher ohne Rolle da als mit einer, die niemand wollte.

Varianten

Was beim Entziehen je Zustand passiert

Wann: Die Vergabe ist ACTIVE.

CIAS trägt die Rolle in Keycloak aus und setzt die Vergabe auf REVOKED.

Ergebnis: Event Revoked mit Grund und dem Mandanten des Aufrufers.

Wann: Die Vergabe ist SCHEDULED, ihr Beginn liegt in der Zukunft.

In Keycloak ist nichts eingetragen, also ruft CIAS Keycloak nicht auf. Die Vergabe wird REVOKED und beginnt nie.

Ergebnis: Der Zeitgeber fasst sie danach nicht mehr an.

Wann: Die Vergabe ist bereits REVOKED, etwa weil die erste Antwort verloren ging.

CIAS ändert nichts und antwortet wie beim ersten Mal.

Ergebnis: Ein Wiederholen ist gefahrlos.

Wann: Die Vergabe ist EXPIRED.

Eine abgelaufene Vergabe wird nicht nachträglich entzogen. „Abgelaufen“ und „entzogen“ sind verschiedene Antworten auf die Frage, warum jemand ein Recht verlor.

Ergebnis: 409 cias.authorization.invalid-state

Wann: Zu der ID gibt es keine Vergabe.

CIAS ändert nichts.

Ergebnis: 404 cias.authorization.assignment-not-found

Was in Keycloak passiert

VergabeIn Keycloak
Realm- oder Client-Rolle, Scope PLATFORMdie Rolle wird direkt vom Konto entfernt
Mandantenrolledie Person verlässt die Gruppe <client>:<rolle> in der Organisation

Bei einer Mandantenrolle bleibt die Gruppe mit ihrer Rolle bestehen. Würde CIAS die Rolle von der Gruppe entfernen, verlören sie alle anderen Mitglieder des Mandanten auf einmal.

Wann es wirkt

Vom Entziehen bis zur abgewiesenen Anfrage
  1. CIAS
    CIAS
    Rolle in Keycloak ausgetragen, Vergabe REVOKED
  2. Keycloak
    Token
    Das Token, das die Person gerade hat, trägt die Rolle noch, bis es abläuft oder erneuert wird
  3. CDMS
    Anwendung
    prüft die Rollen aus dem Token der Anfrage
    ↳ nein 403 erst mit dem neuen Token
  4. Die Person kann die Rolle nicht mehr nutzen

Ein Entzug wirkt also nicht in derselben Sekunde. Wie lange es dauert, hängt von der Laufzeit des Tokens ab. Mehr unter Warum ein Rechteentzug verzögert wirkt. Soll eine Person sofort nichts mehr tun können, sperrt man ihr Konto, siehe Sperren, entsperren, schließen.

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-authorization – RoleAssignmentService (revoke, authorize, pushRevoke), RoleAssignment.revoke, AuthorizationEvent.Revoked
  • CIAS/cias-authorization – RoleAdminController (POST /cias/admin/role-assignments/{id}/revoke), AuthorizationRestDtos.RevokeRequest (reason Pflicht), AuthorizationExceptionHandler
  • CIAS/cias-iam-keycloak – KeycloakRoleAdapter (revoke, revokeInOrganization: Person verlässt die Gruppe, die Gruppe behält die Rolle)
  • CIAS/cias-authentication – TenantGate (TTL), TokenParser
Suchen