Rollen und Berechtigungen

Roles

In Keycloak dient eine Rolle als eine Art Label, das wir einem Benutzer oder einer Gruppe von Benutzern zuweisen können, um bestimmte Berechtigungen zu vergeben. Ein Benutzer mit einer bestimmten Rolle kann daraufhin bestimmte Aktionen ausführen oder auf bestimmte Ressourcen zugreifen, je nachdem, wie client-Anwendungen diese Rollen interpretieren.

Realm-Rollen vs. Client-Rollen

Realm-Rollen: Diese Rollen sind auf Realm-Ebene definiert und gelten für den gesamten Realm. Das heißt, wenn Sie eine Realm-Rolle zu einem Benutzer hinzufügen, hat der Benutzer diese Rolle in jeder Anwendung innerhalb dieses Realms. Realm-Rollen sind ideal für Berechtigungen, die über viele Services hinweg gelten sollen. Diese Rollen sind oft allgemeine Rollen, wie z.B. admin, user oder manager.

Client-Rollen: Diese Rollen sind spezifisch für einen bestimmten Client innerhalb eines Realms. Sie würden Client-Rollen verwenden, wenn Sie einer Anwendung spezifische Rollen hinzufügen möchten. Diese Rollen sind nützlich, um Berechtigungen auf Anwendungsebene feiner zu steuern.

Composite-Rollen: Keycloak erlaubt es auch, sogenannte Composite-Rollen zu erstellen. Ein Composite ist im Grunde eine Rolle, die eine Sammlung von anderen Rollen enthält. Dabei ist es möglich, sowohl Realm-Rollen als auch Client-Rollen in einer einzigen Composite-Rolle zu bündeln. Der Hauptvorteil davon ist, dass Sie eine Reihe von Berechtigungen gruppieren können, die zusammen einen bestimmten Zweck oder Kontext erfüllen.

  • Vorteile:
    • Modularität: Durch die Verwendung von Composite-Rollen können Sie eine modularere und wiederverwendbare Rollen- und Berechtigungsstruktur erstellen. Einzelne Rollen können für spezifische Aufgaben definiert werden, und Composite-Rollen können diese dann zu einer umfassenderen Rolle kombinieren.
    • Einfache Verwaltung: Änderungen an den zugrunde liegenden Rollen werden automatisch auf alle Composite-Rollen angewendet, die diese enthalten. Das vereinfacht die Verwaltung und Wartung von Berechtigungen.
    • Flexibilität: Sie können eine Rolle für einen speziellen Anwendungsfall zusammenstellen, ohne neue Rollen erstellen zu müssen. Zum Beispiel könnte eine Composite-Rolle namens `store-manager` die Rollen `inventory-management`, `employee management` und `customer-service` beinhalten.
  • Erstellung:
    • Realm-Ebene: Wenn Sie unter Roles eine Realm-Rolle auswählen, können Sie diese durch die Option Actions -> Add associated roles zu einer Composite-Rolle machen. Im dann folgenden Dialog können Sie zwischen „Filter by realm roles“ und „Filter by clients“ wechseln, um genau die Rollen auszuwählen, die Sie hinzufügen möchten.
    • Client-Ebene: Ähnlich wie bei Realm-Rollen können Sie auch bei den Client-Rollen unter Actions -> Add associated roles andere Rollen hinzufügen. Auch hier haben Sie die Möglichkeit, im Dialog zwischen „Filter by realm roles“ und „Filter by clients“ zu wechseln, um die passenden Rollen auszuwählen.

    Rollenzuweisung an Benutzer und Gruppen

    Zuweisung an Benutzer

    Sie können Rollen direkt an einen Benutzer zuweisen. Das machen Sie in der Admin-Konsole unter „Benutzer“, indem Sie einen bestimmten Benutzer auswählen und dann zur Tab „Rollen“ wechseln. Hier können Sie Realm-Rollen und Client-Rollen auswählen und dem Benutzer zuweisen.

    Zuweisung an Gruppen

    Wenn Sie eine Rolle mehreren Benutzern gleichzeitig zuweisen möchten, ist es effizienter, diese einer Gruppe zuzuweisen. Alle Benutzer in dieser Gruppe erben dann die Rollen, die der Gruppe zugewiesen sind. Das machen Sie unter „Gruppen“ und dann „Rollen“.

Realm Roles anlegen

  • Im Realm olymp
    • Ream roles → Create role
      • admin
    • Ream roles → Create role
      • user

Create Realm Role

Create Realm Role

Client Roles anlegen

  • Clients → athen → Tab Roles → Create role
    • client_admin
  • Clients → athen → Tab Roles → Create role
    • client_user
Create Client Role

Create Client Role

Composite-Roles anlegen

  • Realm roles → admin → Associated roles → Action → Add associated Roles → Filter by clients
    • Auswählen
      (athen) client_admin
      (athen) client_user

      • Assign
1. Add associated roles
Create Composite Role - Part 1

Create Composite Role – Part 1

2. Filter by clients
Create Composite Role - Part 2

Create Composite Role – Part 2

3. Assign roles to admin
Create Composite Role - Part 3

Create Composite Role – Part 3

Eine weitere Composite-Role

  • Realm roles → user → Associated roles → Action → Add associated Roles → Filter by clients
    • Auswählen
      (athen) client_user

      • Assign

Die Wirkung der Zuordnung einer zusammengesetzten Rolle

Das Zuweisen einer zusammengesetzten Rolle wie ‚admin‘ zu einem Benutzer hat den Vorteil, dass dieser Benutzer nun alle Berechtigungen erbt, die mit den einzelnen Rollen verbunden sind, aus denen die zusammengesetzte Rolle besteht. Im Fall von ‚zeus‘ bedeutet dies:

  • Durch die Realm-Rolle ‚admin‘ erhält der Benutzer administrative Privilegien auf der Ebene des Realms.
  • Mit der Client-Rolle ‚Role client_admin‘ bekommt ‚zeus‘ administrative Rechte für den Client ‚athen‘.
  • Die Client-Rolle ‚Role client_user‘ gewährt ‚zeus‘ zusätzliche benutzerspezifische Rechte für denselben Client.

Das macht die Verwaltung von Berechtigungen viel effizienter und übersichtlicher. Statt mehrere einzelne Rollen zu verwalten, können Sie einfach eine zusammengesetzte Rolle erstellen und diese einem Benutzer zuweisen. Die zusammengesetzte Rolle dient quasi als eine Art „Rechte-Bündel“, das einfach verteilt und verwaltet werden kann.

Nun wissen wir, wie Realms, User und Rollen angelegt werden und wie man eine oder mehrere Rollen einem User zuordnet. Jetzt ist ein guter Zeitpunkt, um das einmal auszuprobieren:

  • Erstellen Sie einen User hercules im Realm olymp
  • Erstellen Sie ein Passwort für den User hercules
  • Weisen Sie dem neuen User die Realm- (composite) Role user zu

Sie können natürlich beliebig andere User hinzufügen. In den hier gezeigten Beispielen ist der Einfachheit halber der Username immer identisch mit dem Passwort.

Ausblick

Demnächst steht die Konfiguration des Realms olymp sowie eine Spring-Demo-Anwendung zum Authorization-Code-Flow auf GitHub zur Verfügung.