Zum Inhalt

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)
  1. Gehen Sie zu Groups
  2. Klicken Sie Create group
  3. Name: Development, klicken Sie Create
  4. Wiederholen Sie die Schritte für Support und Management

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)
  1. Klicken Sie auf die Gruppe Development
  2. Klicken Sie Create child group
  3. Name: Frontend, klicken Sie Create
  4. Wiederholen Sie für die anderen Untergruppen
  5. 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
  • Für Untergruppen:

    • Attribut team mit dem Teamnamen
    • Attribut access_level mit Werten wie "basic", "intermediate", "advanced"
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
  1. Klicken Sie auf eine Gruppe (z.B. Development)
  2. Wechseln Sie zum Tab Attributes
  3. Klicken Sie Add an attribute
  4. Key: department, Value: Development
  5. Klicken Sie Save
  6. 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-Benutzerrolle
  • admin - Administrative Rolle
  • viewer - Nur-Lese-Zugriff
  • editor - Bearbeitungsrechte
  • approver - Genehmigungsrechte
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
  1. Gehen Sie zu Realm roles
  2. Klicken Sie Create role
  3. Role name: user, Description: Basic user role
  4. Klicken Sie Save
  5. 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 und approver beinhalten
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
  1. Erstellen Sie die Rolle manager
  2. Klicken Sie auf die manager Rolle
  3. Wechseln Sie zum Tab Associated roles
  4. Klicken Sie Assign role
  5. Wählen Sie user, viewer, editor, approver aus
  6. 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)
  1. Gehen Sie zu Users > Add user
  2. Username: dev-frontend
  3. Optional: First name: Frontend, Last name: Developer
  4. Klicken Sie Create
  5. Wiederholen Sie für alle anderen Benutzer

3.2: Benutzer zu Gruppen zuordnen

Ordnen Sie die Benutzer den entsprechenden Gruppen zu:

  • dev-frontendDevelopment/Frontend
  • dev-backendDevelopment/Backend
  • support-l1Support/Level1
  • support-l2Support/Level2
  • team-managerManagement
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
  1. Wählen Sie einen User (z.B. dev-frontend)
  2. Wechseln Sie zum Tab Groups
  3. Klicken Sie Join group
  4. Wählen Sie die entsprechende Gruppe (Development/Frontend)
  5. Klicken Sie Join
  6. 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)
  1. Wählen Sie einen User (z.B. dev-frontend)
  2. Wechseln Sie zum Tab Role mapping
  3. Klicken Sie Assign role
  4. Wählen Sie die entsprechenden Rollen
  5. Klicken Sie Assign
  6. 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)
  1. Gehen Sie zu Clients > Create client
  2. Client type: OpenID Connect
  3. Client ID: test-client
  4. Klicken Sie Next
  5. 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 scopestest-client-dedicated
  • Erstellen Sie einen Group Membership Mapper:
    • Name: groups
    • Token Claim Name: groups
    • Full group path: ON
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
  1. Clients > test-client > Client scopes
  2. Klicken Sie auf test-client-dedicated
  3. Tab Mappers > Configure new mapper
  4. Wählen Sie Group Membership
  5. Name: groups
  6. Token Claim Name: groups
  7. Full group path: ON
  8. Add to ID token: ON
  9. 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)
  1. Im test-client-dedicated Client Scope
  2. Tab Mappers > Add mapper > By configuration
  3. User Attribute Mapper
  4. Name: department-mapper
  5. User Attribute: department
  6. Token Claim Name: department
  7. Add to ID token: ON
  8. Add to access token: ON
  9. 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 Clientstest-clientClient scopesEvaluate
  • 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)
  1. Clients > test-client > Client scopes
  2. Tab Evaluate
  3. User: Wählen Sie z.B. dev-frontend
  4. Scopes: Lassen Sie openid ausgewählt
  5. Klicken Sie Evaluate
  6. Betrachten Sie das Generated access token und Generated ID token
  7. 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)
  1. Client scopes > Create client scope
  2. Name: department-info
  3. Type: Optional
  4. Protocol: openid-connect
  5. Klicken Sie Save
  6. Tab Mappers > Add mapper > By configuration
  7. Erstellen Sie den department-mapper wie in Aufgabe 5.2
  8. Gehen Sie zurück zum Client: Clients > test-client > Client scopes
  9. 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)
  1. Clients > test-client > Settings
  2. Scrollen Sie nach unten zu Full scope allowed
  3. Aktivieren Sie es (falls nicht schon aktiviert)
  4. Save
  5. 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
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
  1. Clients > test-client > Settings
  2. Full scope allowed: OFF
  3. Save
  4. Tab Scope
  5. Assign role > Wählen Sie user und editor
  6. 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 Gruppe Development 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:

  1. Gruppenstrukturen: Wie können hierarchische Gruppen in realen Organisationen genutzt werden?
  2. Rollenvererbung: Welche Vorteile bieten zusammengesetzte Rollen?
  3. 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