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