CodamAIDocs
Themafertig

Realm-Rolle, Client-Rolle, Organisationsrolle

Die drei Ebenen, auf denen eine Rolle vergeben wird, wo sie im Token landet und wer sie liest.

Ausprägungen
Realm-RolleClient-Rolle globalClient-Rolle in der Organisation

Worum es geht

Eine Rolle kann auf drei Arten an einer Person hängen. Zwei Fragen legen die Art fest, und sie sind voneinander unabhängig:

  • Welche Ebene in Keycloak? Hat die Rolle keinen Client, ist sie eine Realm-Rolle. Sonst ist sie eine Client-Rolle des Clients, zu dem sie gehört.
  • Welche Reichweite? Eine Vergabe mit Scope PLATFORM hängt direkt am Konto. Eine mit Scope TENANT hängt an der Organisation des Mandanten.

Die drei Ebenen

Wo eine Rolle hängt und wo sie im Token steht
Realm-RolleClient-Rolle globalClient-Rolle in der Organisation
Vergeben andas Konto, realmweitdas Konto, für einen Clientdie Mitgliedschaft in einer Organisation
Steht im Token unterrealm_access.rolesresource_access.<client>.rolesorganization.<alias>.resource_access.<client>.roles
Giltimmer und überallüberall, wo die Person keinen dynamischen Mandanten mit eigenen Rollen hatnur im Mandanten dieser Organisation
Typische Rollenplatform-admin, user, die zwei Wechselrollen, declaration-readerRollen in statischen MandantenRollen in dynamischen Mandanten, etwa tenant-admin
Wer liest siePlattformprüfungen: Administrator, Wechsel, Lesen der Deklarationdas Modul dieses Clientsdas Modul dieses Clients, wenn die Anfrage in diesem Mandanten läuft

So sieht es im Token aus

Token
{
  "realm_access": {
    "roles": ["user", "allowed-tenant-context-switch"]
  },
  "resource_access": {
    "cdms-backend": { "roles": ["report-read"] }
  },
  "organization": {
    "nordbau": {
      "id": "b7e0…",
      "resource_access": {
        "cdms-backend": { "roles": ["order-edit", "tenant-admin"] }
      }
    }
  }
}
Effektive Rollen
Anfrage läuft in nordbau, Client cdms-backend:

Realm-Rollen:      user, allowed-tenant-context-switch
Geschäftsrollen:   order-edit, tenant-admin
                   (report-read gilt hier NICHT)

report-read fehlt in nordbau, weil die Organisation eigene Rollen trägt. Diese ersetzen die globalen Client-Rollen, sie werden nicht mit ihnen gemischt. Trägt eine Organisation gar keine Rollen, gelten die globalen weiter. Die ganze Regel steht unter Effektive Rollen: global oder im Mandanten.

Wie CIAS eine Rolle in Keycloak einträgt

RolleScopeWas CIAS in Keycloak tut
Realm-RollePLATFORMträgt die Rolle direkt am Konto ein
Client-RollePLATFORMträgt die Client-Rolle direkt am Konto ein
Client-RolleTENANTmacht die Person Mitglied einer Gruppe in der Organisation, die <client>:<rolle> heißt und die Rolle trägt
Realm-RolleTENANTmacht die Person Mitglied einer Gruppe in der Organisation, die nach der Rolle heißt

Keycloaks Organisationen haben keine eigenen Rollen, nur Gruppen. Eine Mandantenrolle ist deshalb immer: eine Gruppe in der Organisation, die Rolle an dieser Gruppe, die Person als Mitglied. Der Name <client>:<rolle> verhindert, dass zwei Module mit gleichem Rollennamen sich eine Gruppe teilen.

Ein angenehmer Nebeneffekt: Eine Rolle über eine Organisationsgruppe steht nie in den direkten Realm-Rollen der Person. Eine Organisation kann also die globalen Rollen nicht erweitern.

Wer welche Ebene liest

  • Realm-Rollen liest CIAS selbst: Ist die Person Plattform-Administrator? Darf sie den Mandanten oder die Person wechseln? Kein Mandant kann Realm-Rollen hinzufügen. Sonst könnte, wer einen Mandanten verwaltet, sich Plattformrechte geben.
  • Client-Rollen liest das Modul des Clients, also jede Anwendung ihre eigenen. Die Rollen anderer Clients übergeht die Filterkette, auch wenn sie im Token stehen.

Die Falle mit globalen Client-Rollen

Eine Client-Rolle mit Scope PLATFORM landet in resource_access. Dort stehen aber auch die gewöhnlichen Rollen eines statischen Mandanten. Für eine Person in einem dynamischen Mandanten, dessen Organisation Rollen trägt, wird genau dieser Teil ersetzt. Die Vergabe stünde im Token, gälte aber nie.

CIAS lehnt deshalb ab, eine Client-Rolle mit Scope PLATFORM an eine Person zu vergeben, deren Heimatmandant eine Organisation hat: 403 cias.authorization.denied. Aus demselben Grund darf ein Modul keine Plattformrollen anmelden.

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-authorization – RoleAssignmentService (pushGrant, pushRevoke: Ebene aus dem Client, Reichweite aus dem Scope; refuseAnInvisibleGlobalGrant)
  • CIAS/cias-iam-keycloak – KeycloakRoleAdapter (Organisationsgruppe <client>:<rolle>, assignInOrganization, revokeInOrganization)
  • CIAS/cias-authentication – EffectiveRoles (Realm-Rollen global, Geschäftsrollen je Mandant, Ersetzen statt Mischen), KeycloakOrganizationClaimReader, CiasTokenProperties
  • CIAS/cias-authorization/docs/adr – ADR-023, ADR-031; CIAS/cias-authentication/docs/adr – ADR-006 (Abschnitt 5)
Suchen