CodamAIDocs
Themafertig

Effektive Rollen: global oder im Mandanten

Wie CIAS aus globalen Rollen und Rollen der Organisation die gültigen Rollen bildet und warum global vergebene Rollen unter einem dynamischen Mandanten wegfallen können.

Ausprägungen
nur globale RollenOrganisation ohne eigene RollenOrganisation mit eigenen Rollen (ersetzt)Realm-Rollen (immer)Benutzerwechsel mit Rollen der Zielperson

Worum es geht

Im Token einer Person können Rollen an zwei Stellen stehen:

  • global unter resource_access.<client>.roles: Diese Rollen gelten überall.
  • im Mandanten im Organisations-Claim unter organization.<alias>.resource_access.<client>.roles: Diese Rollen gelten nur, wenn die Anfrage in diesem Mandanten läuft.

Bei jeder Anfrage bildet CIAS daraus die effektiven Rollen: die Rollen, die für genau diese Anfrage gelten. CDMS prüft nur gegen diese.

Warum ersetzen statt addieren? Eine global vergebene Rolle hat niemand für diesen einen Mandanten vergeben. Würde sie mitgelten, könnte ein Recht aus einem Zusammenhang in einen Mandanten „durchsickern“, für den es nie gedacht war. Ein Mandant, der eigene Rollen führt, bestimmt deshalb allein, welche Fachrollen in ihm gelten.

Die Entscheidung

Welche Fachrollen gelten für die Anfrage?
Mandant der Anfrage dynamisch?Person hat dort Rollen, egal für welchen Client?effectiveUserRoles
nein–die globalen Client-Rollen
janeindie globalen Client-Rollen
jajanur die Rollen im Mandanten, für den eigenen Client, dazu die Realm-Rollen, die die Organisation vergibt

Die Realm-Rollen aus realm_access.roles stehen in jedem Fall unverändert in effectiveUserRealmRoles.

Vorher und nachher

flowchart LR
    subgraph V["Im Token"]
      direction TB
      G1["global:<br/>hr-employee-read<br/>report-read"]
      O1["im Mandanten nordbau:<br/>hr-employee-edit"]
      R1["Realm:<br/>allowed-tenant-context-switch"]
    end
    subgraph N["Effektiv in nordbau"]
      direction TB
      E1["Fachrollen:<br/>hr-employee-edit"]
      E2["Realm-Rollen:<br/>allowed-tenant-context-switch"]
    end
    O1 --> E1
    R1 --> E2
    G1 -. "fallen weg" .-> N

Die vier Ausprägungen

Vier Fälle

Wann: Statischer Mandant, SINGLE, oder die Person gehört keiner Organisation an.

Die Fachrollen sind die globalen Client-Rollen des eigenen Clients. Einen Organisations-Claim gibt es nicht oder er zählt nicht.

Ergebnis: effectiveUserRoles = resource_access.<client>.roles

Wann: Dynamischer Mandant, aber in der Organisation hat die Person keine Rollen.

Die Organisation bestimmt nur den Mandanten, nicht die Rollen. Es gelten die globalen Client-Rollen. Deshalb nimmt das bloße Einschalten der Organisationen in Keycloak niemandem seine Rechte.

Ergebnis: effectiveUserRoles = globale Client-Rollen

Wann: Dynamischer Mandant, und in der Organisation hat die Person Rollen.

Die Rollen im Mandanten ersetzen die globalen. Aus dem Organisations-Claim zählt nur der eigene Client: Der Claim enthält die Mandanten-Rollen aller Clients, und die anderen gehen dieses Deployment nichts an.

Ergebnis: effectiveUserRoles = Rollen im Mandanten für den eigenen Client

Wann: immer

Realm-Rollen wie platform-admin, allowed-tenant-context-switch oder allowed-user-context-switch gelten immer, in jedem Mandanten. Eine Organisation kann ihnen nichts hinzufügen. Sonst könnte, wer einen Mandanten verwaltet, sich Plattformrechte geben.

Ergebnis: effectiveUserRealmRoles = realm_access.roles

Und die Attribute?

Für Attribute gilt dasselbe Muster. Ist ein Attribut pro Mandant angemeldet, holt CIAS den Wert für den aktiven Mandanten und ersetzt damit den Wert aus dem Token. Kann CIAS den Wert nicht abrufen, lehnt es die Anfrage ab, statt auf den Wert im Token zurückzufallen. Siehe Ein Wert pro Person oder pro Mandant.

Und nach einem Benutzerwechsel?

Nach einem Benutzerwechsel mit dem Header user-roles: target bildet CIAS die effektiven Rollen für die Zielperson, nach denselben Regeln wie oben. Ist sie Mitglied der Organisation des Mandanten und trägt die Mitgliedschaft Rollen, ersetzen diese ihre globalen Client-Rollen. Ihre Realm-Rollen gelten wie immer. Ohne user-roles: target bleiben die effektiven Rollen die der angemeldeten Person.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-authentication – EffectiveRoles.resolve, EffectiveAttributes.resolve, TokenParser.admit, TokenParser.switchUser, KeycloakOrganizationClaimReader
  • CIAS/cias-iam-keycloak – KeycloakRepresentedIdentityAdapter (Rollen und Organisationen der Zielperson eines Benutzerwechsels)
  • CIAS/cias-authorization – RoleAssignmentService (pushGrant, refuseAnInvisibleGlobalGrant)
  • CIAS/cias-authorization/docs/adr – ADR-023, ADR-031, ADR-034
  • CIAS/CLAUDE.md – §13.1, §13.2
Suchen