Keycloakschulung Mitschrift Teil 3/3

@achimmertens · 2025-10-30 06:43 · Deutsch D-A-CH

Hallo zusammen,

dies ist der dritte und letzte Teil meiner Schulung in Keycloak und damit auch meiner Mitschrift. Hier sind Teil 1 und Teil 2. Wie schon in den anderen Teilen beschrieben, fasse ich hier mit meinen Worten zusammen, was ich an dem Tag der Schulung verstanden habe und damit gebe ich keine Gewähr auf Richtigkeit (gebe mir aber Mühe ;-))

Ein paar Wortdefinitionen

Cookies vs. Token

Cookies sind die ältere Technologie. Token bestehen aus Header, Payload und Signatur im JWT Format (Siehe Teil 2) Hier eine Zusammenfassung von Perplexity (mit "Client" ist hier die Nutzer-App oder ein Browser gemeint): | Eigenschaft | Cookie (Browser) | Token (Client/Browser/Apps) | | :-- | :-- | :-- | | Speicherung | Browser-Cookie | Vom Client frei wählbar (localStorage, Datei, App-Backend) | | automatische Sendung | Ja, nur im Browser | Nein, Client muss aktiv das Token mitsenden | | Nutzbarkeit | Nur im Browser sinnvoll | In jedem Clienttyp nutzbar | | Serverzustand | Stateful (Session auf Server) | Stateless (Infos im Token selbst) | | Sicherheit | HTTPOnly, Secure-Flag etc. | Signatur (JWT/Token kann lokal geprüft werden) |

Identity Broker

Keycloak kann als Identity Broker dienen.

Identity Broker: Hier werden verschiedene Identity Provider zusammengeführt (Ldap, AD, andere Keycloaks,…). Ein Identity Broker vermittelt Authentifizierungen zwischen verschiedenen Providern, sodass der Nutzer sich mit diversen Identitäten anmelden kann.

Keycloak kann in 3 verschiedenen Modi laufen: Lesend, lesend+schreibend, spiegelnd (Live-Abfragen)

Die Schreibrechte von Keycloak zu LDAP sind die Rechte die in LDAP für den jeweiligen User gelten.

In Keycloak können die Passwörter neu erstellt werden, die dann ins LDAP geschrieben werden. Oder das Passwort-Reset wird auf das LDAP weitergeleitet.

Wenn ein Passwort geändert wird, dann wird die Session nicht gelöscht. D.h. kompromittierte Passwörter funktionieren dann noch so lange, wie die Session offen ist. Dies ist ein häufiges Sicherheitsrisiko und Keycloak-Administratoren sollten ggf. Sessions explizit beenden, wenn ein Passwort kompromittiert wurde.

Anbindung von LDAP an Keycloak

LDAP Schnittstelle

Wichtig: Das richtige Realm im Keycloak auswählen. Sonst wundert man sich, dass die User sich nicht einloggen können, obwohl man alles richtig konfiguriert hat. (Lesson Learned ;-))

Im Keycloak auf User Federation klicken und dann auf "Add Ldap providers" klicken:

image.png

Für unseren Fall geben wir folgende LDAP Daten ein:

image.png

Die Verbindung kann man testen und sieht im Erfolgsfall so aus:

image.png

Und wenn wir die LDAP Daten richtig eingeben, können wir uns auch erfolgreich authentifizieren:

image.png

Hier unsere Einstellungen:

UI Display Name frei wählbar Vendor Active Directory Connection URL ldaps://dc1.ad.example.test:636 Enable StartTLS aus Use Truststore SPI Always Connection Pooling an Connection Timeout optional Mit “Test Connection funktion überprüfen”

Bind Type simple Bind DN cn=ldap,cn=Users,dc=ad,dc=example,dc=test

image.png

image.png

image.png

image.png

Speichern und Action/Sync all users klicken:

image.png Wir finden die User im Keycloak unter Users und im Suchfeld geben wir ein "*" ein.

Nun sind wir in der Lage, uns mit einem LDAP-User bei der Zielapplikation anzumelden.

Mapper

Um die Felder, die in LDAP existieren, sinnvoll in Keycloak zu integrieren, müssen sie gemappt werden. Also fügen wir bei der LDAP Schnittstelle noch ein paar Mapper zu:

Add Mapper:

image.png

image.png

image.png

LDAP Gruppen

Nun wollen wir die LDAP Gruppen importieren

In User Federation/LDAP/Mappers sehen wir jetzt unseren neuen Mapper "ldap_gruppen". Dort klicken wir drauf:

image.png

Rechts oben klicken wir auf Action/Sync LDAP groups to Keycloak:

image.png

Im Gutfall erscheint dann eine Erfolgsmeldung:

image.png

Die Gruppen, die wir in LDAP hinterlegt haben, finden wir jetzt in Keycloak unter Groups:

image.png

In der Gruppe "nextcloud-admins" finden wir den User "testadmin". Dieser sollte jetzt Admin-Rechte in Nextcloud haben.

image.png

Das Zielsystem muss natürlich wissen, dass es Gruppen aus Keycloak/LDAP empfangen soll. Dazu müssen wir das Client Secret von Keycloak und andere Felder befüllen:

image.png

Leider hat das bei uns nicht funktioniert.

Als Ergebnis hätte ich als User "testadmin" die Admin-Settings sehen sollen.


----- Nachmittag ---

Fragen für Tag 3:

Kann man Rollen ins Keycloak importieren? Z.B. von einem IAM-System wie Sailpoint? Könnte man damit Keycloak als (rudimentäres) IAM System verwenden? - Ja, aber Keycloak ist kein vollwärtiges IAM system.

Wenn ich meinen Token aus meinem Browser raus kopiere (oder eine Spionagesoftware das macht), kann sich dann jemand anderes damit mit meinem Account an der Applikation anmelden? - Ja. Wenn mein System kompromitiert ist (z.B. durch ein schädliches Browser Add On) und ich logge mich bei dem einen System ein, dann kann jemand mit meinem Refresh Token auf alle anderen Systeme zugreifen, die am Identity Provider angebunden sind.

Kann ein böses Zielsystem sich mit einem Access-Token an den anderen Zielsystemen des Keycloaks anmelden? - Nein. Der Access Token ist nur je Zielsystem gültig. Sollte das böse Zielsystem (oder wer auch immer)(wie auch immer) an den Refresh Token gelangen (was eher unwahrscheinlich ist), dann käme es auch an die Access-Token für die anderen Systeme.

SAML

Nun wollen wir das Zielsystem Nextcloud über das SAML Protokoll an Keycloak anbinden. Dazu klicken wir in Nextcloud als Admin auf Administration/SSO & SAML Authentication/Use Build-in SAML authentication: image.png

Wir sollten uns die URL für den lokalen Admin kopieren und wegsichern: https://www.example.test/nextcloud/login?direct=1. Das ist sinnvoll, damit wenn wir uns aussperren, wenigstens wieder lokal (also ohne Keycloak) mit dem Admin Account anmelden können:

image.png

Wir brauchen die Daten aus Keycloak/Realm Settings/SAML 2.0 Identity Provider Metada:

image.png

image.png

image.png

Wir erstellen einen SAML Client in Keycloak:

image.png

image.png

Dort auf "keys" klicken und das Zertifikat kopieren:

image.png

Und einfügen in Nextcloud in dem versteckten optionalen Feld "Public X.509 certificate of the idP":

image.png

Jetzt müssen wir noch ein paar Mapper unter Client Scopes in Keycloak hinzufügen:

image.png

In dem Client Scope fügen wir mit "Add Mapper/By Configuration" drei Mapper (uid, mail, fullname) hinzu:

image.png

image.png

image.png

image.png

image.png

Auch das hat leider nicht geklappt. Es liegt an unserer Enterprise-Edition, bzw. wir haben die falsche Software Lizenz installiert und können die Integration so nicht durchführen.

Das Ergebnis wäre gewesen, dass ich beim Anmelden an Nextcloud die Auswahl erhalte, dass ich meinen SAML-User hätte nehmen können.

Fazit der drei Tage

Ich habe eine Menge über Keycloak gelernt und hier auch dokumentiert. Ich denke es wird mir zumindest beim Verständnis der Prozesse im IAM Umfeld deutlich weiterhelfen. Ggf. werde ich auch die ein oder andere Schnittstelle implementieren. Schade fand ich, dass am dritten Tag nicht alles geklappt hat - So ist das Leben. Aber ich hoffe auch, dass ich das SAML Protokoll eh nicht brauchen werde ;-) Unterm Strich war es trotzdem eine gute Schulung, die mich bereichert hat.

Achim Mertens

#keycloak #docu #iam #identity #provider #token #saml #ldap #deutsch
Payout: 0.000 HBD
Votes: 67
More interactions (upvote, reblog, reply) coming soon.