LIVCK Cloud

Keycloak einrichten

Keycloak ist als OIDC-Identity-Provider vollständig unterstützt. Diese Anleitung führt dich durch die Einrichtung — vom Anlegen des Realm-Clients bis zum Gruppen-Mapping in LIVCK.

Voraussetzung

Enterprise SSO ist für deine Organisation freigeschaltet und du hast die Berechtigung SSO verwalten. Lege zuerst eine SSO-Verbindung in LIVCK an (Einstellungen → Organisation → SSO → Neue Verbindung) und kopiere die dort angezeigte Redirect-URI — du brauchst sie im nächsten Schritt.

Übersicht

Keycloak kann Gruppenzugehörigkeiten auf zwei Wegen im Token liefern:

WegClaim-NameInhaltEmpfohlen?
Realm-Rollenrealm_access.roles (verschachtelt)Array von Rollen-NamenNur mit eigenem Mapper
GruppengroupsArray von Gruppen-Pfaden (z.B. /livck-admin)Ja — für die meisten Fälle

Wir empfehlen Gruppen, weil sie im Standard-Keycloak-Mapper direkt als flaches Array im Token landen und sich sauber mappen lassen. Realm-Rollen liegen verschachtelt in realm_access.roles und brauchen einen eigenen Protocol Mapper, damit LIVCK sie als Groups-Claim auslesen kann.


Weg A: Gruppen (empfohlen)

1. Realm (falls nötig) anlegen

Keycloak organisiert alles in Realms. Pro Organisation empfiehlt sich ein eigener Realm.

  1. Keycloak Admin Console → Menü oben links → Create Realm
  2. Realm name: z.B. livck
  3. Create

Nicht im master-Realm

Lege für produktive Anwendungen immer einen eigenen Realm an. Der master-Realm ist für die Keycloak-Administration reserviert.

2. Client registrieren

  1. Realm livck → Clients → Create client
  2. Client type: OpenID Connect
  3. Client ID: z.B. livck
  4. Next
  5. Authentication flow:
    • Client authentication: ☑ ON (damit wird ein Client-Secret erzeugt — zwingend für LIVCK)
    • Authorization: ☐ OFF
    • Standard flow: ☑ ON
    • Direct access grants: ☐ OFF (nicht empfohlen)
  6. Next
  7. Valid redirect URIs: die Redirect-URI aus LIVCK eintragen
  8. Web origins: leer (nicht benötigt)
  9. Save

3. Client-Secret kopieren

Clients → livck → Credentials → Client secretCopy

Das Secret ist nur hier sichtbar — sicher ablegen.

4. Gruppen anlegen

Realm livck → Groups → Create group

Lege pro LIVCK-Rolle eine Gruppe an:

GruppennamePfadLIVCK-Rolle
livck-admin/livck-adminAdmin
livck-member/livck-memberMember
livck-viewer/livck-viewerViewer

Gruppen-Pfad wird normalisiert

LIVCK entfernt den führenden Schrägstrich automatisch und vergleicht case-insensitiv. Sowohl /livck-admin als auch livck-admin als auch LIVCK-Admin matchen die gleiche Gruppe. Trage im Mapping einfach den Wert ein, der dir im Keycloak-Admin angezeigt wird.

5. Benutzer den Gruppen zuweisen

Users → Benutzer auswählen → Groups tab → Join group → Gruppe wählen → Join

Wiederholen für jeden Benutzer / jede Rolle.

Häufigster Fehler

Ohne diese Zuweisung liefert Keycloak einen leeren groups-Claim. Das ist der Schritt, der am häufigsten vergessen wird — und der Grund, warum "keine Gruppen" im Test-Login auftaucht.

6. Groups-Claim im Token aktivieren

Keycloak liefert die Gruppen nicht automatisch im ID-Token. Du brauchst einen Protocol Mapper:

  1. Clients → livck → Client scopes tab
  2. Scope openid (oder den dedizierten Client-Scope) → Mappers tab → Add mapper → By configuration
  3. Vorlage: Group Membership
  4. Konfiguration:
FeldWert
Namez.B. groups
Token Claim namegroups
Full group pathON (liefert /livck-admin statt nur livck-admin)
Add to ID tokenON ← Pflicht
Add to access token☐ OFF (nicht nötig)
Add to userinfo☑ ON (optional)
  1. Save

Im ID-Token ausliefern

Stelle sicher, dass "Add to ID token" aktiviert ist. LIVCK liest den Groups-Claim standardmäßig aus dem ID-Token.

7. Zugangsdaten sammeln

  • Issuer-URL: https://keycloak.example.com/realms/livck (ohne /.well-known/openid-configuration am Ende — LIVCK hängt das Discovery-Suffix automatisch an)
  • Client-ID: aus Schritt 2 (livck)
  • Client-Secret: aus Schritt 3

Die Issuer-URL findest du auch unter Realm Settings → General → Issuer.

8. In LIVCK eintragen

Einstellungen → Organisation → SSO → Verbindung bearbeiten → Konfiguration:

FeldWert
Issuer-URLhttps://keycloak.example.com/realms/livck
Client-IDaus Schritt 7
Client-Secretaus Schritt 7
Groups-claimgroups
Quelle des Groups-claimsID-Token
Wenn keine Gruppe passtnach Bedarf (Standard-Rolle / Keine Rollen / Login ablehnen)

Konfiguration speichern

9. Domain verifizieren

Siehe SSO einrichten → Domain verifizieren.

10. Mapping anlegen

Einstellungen → Organisation → SSO → Verbindung → Mappings:

Pro Gruppe einen Eintrag:

  • IdP-Gruppe: der Pfad aus Schritt 4 (z.B. /livck-admin — führender Schrägstrich und Groß-/Kleinschreibung werden von LIVCK ignoriert)
  • Rolle: die entsprechende LIVCK-Rolle

Hinzufügen

11. Testen

Klicke auf Login testen. Im Dry-Run-Report sollte stehen:

  • Gruppen: ["livck-admin"]
  • Ermittelte Rollen: Admin
  • Würde sich anmelden: ja

Weg B: Realm-Rollen (alternativ)

Verwende diesen Weg nur, wenn du bereits Keycloak-Rollen pflegst und keine Gruppen anlegen möchtest.

1. Client registrieren

Wie Weg A, Schritte 1–3.

2. Realm-Rollen anlegen

Realm Roles → Create role

RollennameLIVCK-Rolle
livck-adminAdmin
livck-memberMember
livck-viewerViewer

3. Benutzer die Rollen zuweisen

Users → Benutzer → Role mapping tab → Assign role → Rolle wählen

4. Realm-Rollen als flachen Claim ausliefern

Keycloak liefert Realm-Rollen verschachtelt in realm_access.roles. Damit LIVCK sie als Groups-Claim auslesen kann, legst du einen Mapper an, der sie flach als eigenen Claim ausgibt:

  1. Clients → livck → Client scopes tab → openid → Mappers tab → Add mapper → By configuration
  2. Vorlage: User Realm Role
  3. Konfiguration:
FeldWert
Namez.B. realm-roles
Token claim namegroups ← LIVCK liest diesen Namen aus
Add to ID tokenON
  1. Save

Claim-Name = groups

Trage als Token-Claim-Name groups ein, nicht roles oder realm_access. LIVCK erwartet den unter Groups-claim konfigurierten Namen. Wenn du den Mapper realm-roles nennst, landet der Claim trotzdem unter dem konfigurierten Token-Claim-Namen.

5. In LIVCK eintragen

FeldWert
Groups-claimgroups (entspricht dem Token-Claim-Namen aus Schritt 4)
Quelle des Groups-claimsID-Token

6. Mapping anlegen

  • IdP-Gruppe: exakt der Rollenname (z.B. livck-admin)
  • Rolle: die LIVCK-Rolle

7. Nachteil: verschachtelte Default-Rollen

Ohne den eigenen Mapper (Weg B Schritt 4) bleiben die Rollen in realm_access.roles verschachtelt. LIVCK kann diese Struktur nicht auslesen — der groups-Claim bleibt leer und der Login schlägt fehl.

Lösung: Verwende Weg A (Gruppen) oder den Mapper aus Schritt 4.


Troubleshooting

Im Test-Login steht "kein groups-Claim empfangen"

UrsacheLösung
Benutzer ist keiner Gruppe zugewiesenUsers → Benutzer → Groups → Gruppe zuweisen
Group-Mapper fehlt oder ist falsch konfiguriertClients → livck → Mappers → Group Membership prüfen
"Add to ID token" ist deaktiviertMapper → Checkbox setzen → Save
Groups-Claim-Feld steht auf realm_access.rolesauf groups umstellen (oder Mapper aus Weg B anlegen)
Quelle steht auf UserInfo-Endpointauf ID-Token umstellen

Im Test-Login stehen Pfade statt reinen Namen

Du hast "Full group path" im Mapper aktiviert. Das ist in Ordnung — LIVCK entfernt den führenden Schrägstrich automatisch, daher matchen /livck-admin und livck-admin gleichermaßen.

Im Test-Login steht die richtige Gruppe, aber Login schlägt fehl

Prüfe:

  • Ist die E-Mail-Domain verifiziert? (SSO → Domains)
  • Ist die Verbindung aktiviert?
  • Hat der Benutzer eine verifizierte E-Mail im Keycloak?
  • Stimmt die Redirect-URI exakt? (inkl. HTTPS-Schema, kein Trailing-Slash)

Issuer-URL validieren

Die Issuer-URL muss exakt sein — ohne Trailing-Slash und ohne /.well-known/openid-configuration am Ende. LIVCK hängt das Discovery-Suffix automatisch an.

Richtig:

https://keycloak.example.com/realms/livck

Falsch:

https://keycloak.example.com/realms/livck/.well-known/openid-configuration
https://keycloak.example.com/realms/livck/
https://keycloak.example.com/auth/realms/livck   ← alter Pfad (nur Keycloak < 17)

Keycloak 17+ Pfad

Ab Keycloak 17 (Quarkus) entfällt das /auth/-Segment im Pfad. Bei älteren WildFly-Distributionen heißt die Issuer-URL https://keycloak.example.com/auth/realms/{realm}. Prüfe die URL unter Realm Settings → General → Issuer.

"Invalid issuer" oder Discovery schlägt fehl

  • Prüfe, dass die Realm-URL von außerhalb deines Netzwerks erreichbar ist.
  • Keycloak muss mit gügltigem TLS-Zertifikat laufen — LIVCK validiert die Discovery-Dokumente.
  • Falls du hinter einem Reverse-Proxy betreibst: stelle sicher, dass Keycloak den proxy-headers Modus kennt (KC_PROXY_HEADERS=true bei Quarkus).

Client-Authentication-Fehler (401)

  • Client-Secret korrekt kopiert? (nicht der Client-ID)
  • Client authentication ist im Client auf ON?
  • Redirect-URI stimmt exakt überein?

Weiterführende Themen