Gruppen, Rollen, Clients
Ziel
In dieser Aufgabe lernen Sie das umfassende Management von Gruppen und Rollen in Keycloak sowie deren Integration in OIDC-Clients kennen. Sie werden hierarchische Gruppenstrukturen erstellen, Rollen definieren, verschiedene Benutzerszenarien konfigurieren und die Token-Evaluation nutzen, um zu verstehen, wie Gruppeninformationen und Rollen in OIDC-Token übertragen werden. Am Ende verstehen Sie den Unterschied zwischen "Full Scope Allowed" und gezielter Scope-Verwaltung.
Hilfsmittel
- Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Folien zu Single Sign-On und Client Management eigenständig zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Vorbereitung
- Stellen Sie sicher, dass Ihre Keycloak-Instanz aus der vorherigen Aufgabe noch läuft
- Falls nicht, starten Sie sie erneut mit
docker compose up -d - Loggen Sie sich als Admin in die Keycloak-Konsole ein
- Stellen Sie sicher, dass Sie sich in Ihrem erstellten Realm (z.B. "schulung") befinden
Aufgabe 1 - Hierarchische Gruppenstruktur erstellen
1.1: Hauptgruppen erstellen
Erstellen Sie eine hierarchische Gruppenstruktur, die eine Firmenorganisation repräsentiert.
- Erstellen Sie folgende Gruppen als Hauptgruppen:
DevelopmentSupportManagement
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Gehen Sie zu Groups
- Klicken Sie Create group
- Name:
Development, klicken Sie Create - Wiederholen Sie die Schritte für
SupportundManagement
1.2: Untergruppen erstellen
-
Erstellen Sie unter
Developmentdie Untergruppen:FrontendBackendDevOps
-
Erstellen Sie unter
Supportdie Untergruppen:Level1Level2
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Klicken Sie auf die Gruppe Development
- Klicken Sie Create child group
- Name:
Frontend, klicken Sie Create - Wiederholen Sie für die anderen Untergruppen
- Wiederholen Sie den Prozess für die Support-Untergruppen
1.3: Gruppenattribute definieren
Fügen Sie Attribute zu den Gruppen hinzu, um zusätzliche Informationen zu speichern:
-
Für alle Hauptgruppen:
- Attribut
departmentmit dem jeweiligen Abteilungsnamen - Attribut
costcentermit verschiedenen Werten
- Attribut
-
Für Untergruppen:
- Attribut
teammit dem Teamnamen - Attribut
access_levelmit Werten wie "basic", "intermediate", "advanced"
- Attribut
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Klicken Sie auf eine Gruppe (z.B. Development)
- Wechseln Sie zum Tab Attributes
- Klicken Sie Add an attribute
- Key:
department, Value:Development - Klicken Sie Save
- Wiederholen Sie für weitere Attribute und andere Gruppen
Aufgabe 2 - Rollen definieren
2.1: Realm-Rollen erstellen
Erstellen Sie verschiedene Realm-Rollen, die Berechtigungen repräsentieren:
user- Basis-Benutzerrolleadmin- Administrative Rolleviewer- Nur-Lese-Zugriffeditor- Bearbeitungsrechteapprover- Genehmigungsrechte
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Gehen Sie zu Realm roles
- Klicken Sie Create role
- Role name:
user, Description:Basic user role - Klicken Sie Save
- Wiederholen Sie für alle anderen Rollen
2.2: Zusammengesetzte Rollen
Erstellen Sie eine zusammengesetzte Rolle, die mehrere andere Rollen beinhaltet:
- Rolle
managererstellen - Diese Rolle soll automatisch die Rollen
user,viewer,editorundapproverbeinhalten
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Erstellen Sie die Rolle manager
- Klicken Sie auf die manager Rolle
- Wechseln Sie zum Tab Associated roles
- Klicken Sie Assign role
- Wählen Sie
user,viewer,editor,approveraus - Klicken Sie Assign
Aufgabe 3 - Benutzer und Zuordnungen erstellen
3.1: Testbenutzer erstellen
Erstellen Sie verschiedene Benutzer für unterschiedliche Szenarien:
dev-frontend(Frontend-Entwickler)dev-backend(Backend-Entwickler)support-l1(Level 1 Support)support-l2(Level 2 Support)team-manager(Team Manager)
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Gehen Sie zu Users > Add user
- Username:
dev-frontend - Optional: First name:
Frontend, Last name:Developer - Klicken Sie Create
- Wiederholen Sie für alle anderen Benutzer
3.2: Benutzer zu Gruppen zuordnen
Ordnen Sie die Benutzer den entsprechenden Gruppen zu:
dev-frontend→Development/Frontenddev-backend→Development/Backendsupport-l1→Support/Level1support-l2→Support/Level2team-manager→Management
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Wählen Sie einen User (z.B. dev-frontend)
- Wechseln Sie zum Tab Groups
- Klicken Sie Join group
- Wählen Sie die entsprechende Gruppe (
Development/Frontend) - Klicken Sie Join
- Wiederholen Sie für alle anderen Benutzer
3.3: Rollen zuweisen
Weisen Sie den Benutzern folgende Rollen zu:
dev-frontend,dev-backend:user,editorsupport-l1:user,viewersupport-l2:user,viewer,editorteam-manager:manager(beinhaltet automatisch andere Rollen)
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Wählen Sie einen User (z.B. dev-frontend)
- Wechseln Sie zum Tab Role mapping
- Klicken Sie Assign role
- Wählen Sie die entsprechenden Rollen
- Klicken Sie Assign
- Wiederholen Sie für alle anderen Benutzer
Aufgabe 4 - OIDC Client erstellen
4.1: Basic OIDC Client
Erstellen Sie einen OIDC Client für die Token-Evaluation:
- Client ID:
test-client - Client type: OpenID Connect
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Gehen Sie zu Clients > Create client
- Client type: OpenID Connect
- Client ID:
test-client - Klicken Sie Next
- Klicken Sie Save
Aufgabe 5 - Client Scopes und Mapper konfigurieren
5.1: Group Membership Mapper
Erstellen Sie einen Mapper, um Gruppenmitgliedschaften in Token einzuschließen:
- Gehen Sie zu Ihrem Client → Client scopes → test-client-dedicated
- Erstellen Sie einen Group Membership Mapper:
- Name:
groups - Token Claim Name:
groups - Full group path: ON
- Name:
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Clients > test-client > Client scopes
- Klicken Sie auf test-client-dedicated
- Tab Mappers > Configure new mapper
- Wählen Sie Group Membership
- Name:
groups - Token Claim Name:
groups - Full group path: ON
- Add to ID token: ON
- Add to access token: ON
5.2: User Attribute Mapper
Erstellen Sie Mapper für Gruppenattribute:
- Name:
department-mapper - Mapper Type: User Attribute
- User Attribute:
department - Token Claim Name:
department
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Im test-client-dedicated Client Scope
- Tab Mappers > Add mapper > By configuration
- User Attribute Mapper
- Name:
department-mapper - User Attribute:
department - Token Claim Name:
department - Add to ID token: ON
- Add to access token: ON
- Klicken Sie Save
- Wiederholen Sie die gleichen Schritte für das Subgruppenattribute team.
5.3: Hardcoded Claim Mapper
Fügen Sie einen hardcoded Claim hinzu:
- Name:
app-version - Token Claim Name:
app_version - Claim value:
1.0.0
Aufgabe 6 - Token Evaluation testen
6.1: Basic Token Evaluation
Nutzen Sie die integrierte Token Evaluation Funktion:
- Gehen Sie zu Clients → test-client → Client scopes → Evaluate
- Wählen Sie verschiedene Benutzer aus (
dev-frontend,support-l1,team-manager) - Analysieren Sie die generierten Token
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Clients > test-client > Client scopes
- Tab Evaluate
- User: Wählen Sie z.B.
dev-frontend - Scopes: Lassen Sie openid ausgewählt
- Klicken Sie Evaluate
- Betrachten Sie das Generated access token und Generated ID token
- Prüfen Sie, welche Gruppen, Rollen und Attribute enthalten sind
6.2: Scope-spezifische Evaluation
Erstellen Sie einen Custom Client Scope:
- Name:
department-info - Type: Optional
- Fügen Sie den
department-mapperzu diesem Scope hinzu - Testen Sie Token mit und ohne diesen Scope
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Client scopes > Create client scope
- Name:
department-info - Type: Optional
- Protocol: openid-connect
- Klicken Sie Save
- Tab Mappers > Add mapper > By configuration
- Erstellen Sie den department-mapper wie in Aufgabe 5.2
- Gehen Sie zurück zum Client: Clients > test-client > Client scopes
- Add client scope > Wählen Sie
department-info> Optional
Aufgabe 7 - Full Scope Allowed testen
7.1: Full Scope Allowed aktiviert
- Stellen Sie sicher, dass bei Ihrem Client Full scope allowed aktiviert ist
- Evaluieren Sie Token für verschiedene Benutzer
- Beobachten Sie, welche Rollen in den Token enthalten sind
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Clients > test-client > Settings
- Scrollen Sie nach unten zu Full scope allowed
- Aktivieren Sie es (falls nicht schon aktiviert)
- Save
- Gehen Sie zur Token Evaluation und testen Sie verschiedene Benutzer
7.2: Full Scope Allowed deaktiviert
- Deaktivieren Sie Full scope allowed
- Gehen Sie zu Scope Tab des Clients
- Weisen Sie gezielt Rollen zu:
- Realm roles:
user,editor - Beobachten Sie die Unterschiede in den Token
- Realm roles:
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Clients > test-client > Settings
- Full scope allowed: OFF
- Save
- Tab Scope
- Assign role > Wählen Sie
userundeditor - Gehen Sie zur Token Evaluation und vergleichen Sie die Token
7.3: Vergleich analysieren
Dokumentieren Sie die Unterschiede:
- Mit Full scope allowed: Welche Rollen sind enthalten?
- Ohne Full scope allowed: Welche Rollen sind enthalten?
- Was passiert mit der
managerRolle bei verschiedenen Benutzern?
Aufgabe 8 - Erweiterte Szenarien (Optional)
8.1: Dynamische Gruppenzuordnung
Erstellen Sie ein Szenario, bei dem Benutzer in mehreren Gruppen sind:
- Fügen Sie
team-managerzusätzlich zur GruppeDevelopmenthinzu - Evaluieren Sie das Token und beobachten Sie die Gruppenliste
8.2: Rollenvererbung testen
- Überprüfen Sie, ob die
managerRolle korrekt alle untergeordneten Rollen vererbt - Testen Sie verschiedene Scope-Konfigurationen
Cleanup und Reflexion
Aufräumen
- Optional: Löschen Sie nicht benötigte Testbenutzer
- Behalten Sie die Gruppenstruktur für weitere Übungen
Reflexionsfragen
Denken Sie über folgende Punkte nach:
- Gruppenstrukturen: Wie können hierarchische Gruppen in realen Organisationen genutzt werden?
- Rollenvererbung: Welche Vorteile bieten zusammengesetzte Rollen?
- Token-Inhalte: Welche Informationen sollten in Produktionsumgebungen in Token enthalten sein?
Produktive Umgebungen
In produktiven Umgebungen sollten Sie zusätzlich beachten:
- Minimale Token-Größe für bessere Performance
- Sensible Daten nicht in Token speichern
- Regelmäßige Überprüfung der Gruppenzuordnungen
- Automatisierte Benutzer-Provisionierung
- Audit-Logging für Rollenänderungen
Sicherheitshinweis
- "Full Scope Allowed" sollte in Produktionsumgebungen vermieden werden
- Token-Inhalte sind für Clients sichtbar - keine sensiblen Daten einschließen