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:
Development
Support
Management
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
Support
undManagement
1.2: Untergruppen erstellen
-
Erstellen Sie unter
Development
die Untergruppen:Frontend
Backend
DevOps
-
Erstellen Sie unter
Support
die Untergruppen:Level1
Level2
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
department
mit dem jeweiligen Abteilungsnamen - Attribut
costcenter
mit verschiedenen Werten
- Attribut
-
Für Untergruppen:
- Attribut
team
mit dem Teamnamen - Attribut
access_level
mit 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
manager
erstellen - Diese Rolle soll automatisch die Rollen
user
,viewer
,editor
undapprover
beinhalten
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
,approver
aus - 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/Frontend
dev-backend
→Development/Backend
support-l1
→Support/Level1
support-l2
→Support/Level2
team-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
,editor
support-l1
:user
,viewer
support-l2
:user
,viewer
,editor
team-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-mapper
zu 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
user
undeditor
- 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
manager
Rolle 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-manager
zusätzlich zur GruppeDevelopment
hinzu - Evaluieren Sie das Token und beobachten Sie die Gruppenliste
8.2: Rollenvererbung testen
- Überprüfen Sie, ob die
manager
Rolle 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