Du kannst die Synchronisation von Benutzerkonten zwischen Microsoft Entra ID und Keycloak auch mithilfe des SCIM-Protokolls durchführen. Hierfür nutzt du das Drittanbieter-Plugin SCIM for Keycloak, das eine SCIM-Schnittstelle für Keycloak bereitstellt. Dieses Plugin ist kommerziell, bietet jedoch eine kostenlose Version mit einer begrenzten Nutzeranzahl und einer kurzen Lizenzlaufzeit. Falls du dich mit weiteren Ansätzen zur Nutzer-Synchronisation zwischen Entra ID und Keycloak vertraut machen möchtest, empfehle ich dir die Blogartikel Benutzer-Synchronisation zwischen Entra ID und Keycloak per Python-Skript und Nutzer-Synchronisation zwischen Entra ID und Keycloak: Python-Skript vs. SCIM. In diesem Blogbeitrag zeige ich dir, wie du die Konfiguration in Keycloak und Entra ID durchführst, um eine funktionierende Synchronisation zu ermöglichen.
1. Konfiguration des SCIM-Servers in Keycloak
Du installierst das Plugin gemäß der Anleitung des Herstellers. Nachdem du das Plugin installiert hast, musst du SCIM in der Administrationskonsole für das gewünschte Realm aktivieren.

Über den Button edit gelangt man zu den SCIM-Konfigurationseinstellungen für diesen Realm. Für die Integration mit Entra ID haben wir folgende Einstellungen gemacht (weitestgehend die Default-Einstellungen):




Im Tab Authorization ist ein Keycloak-Client zu hinterlegen, der die Rechte hat die Nutzer in Keycloak entsprechend zu aktualisieren. Zu der Konfiguration des Clients wird in einem Folgekapitel noch eingegangen.

Im Tab Resoure Types finden sich die Endpunkte des SCIM-Servers. Hier ist besonders der Endpunkt User relevant, da dieser in EntraID hinterlegt werden muss:

2. Konfiguration eines Service Clients in Keycloak
Damit Entra ID Benutzer nach Keycloak provisionieren kann, benötigt es ein Bearer-Token zur Authentifizierung und Autorisierung gegenüber Keycloak. Hierfür muss ein entsprechender Client in Keycloak angelegt werden.


Folgende Rechte müssen dem Service Account eingeräumt werden:

Da für den Client ein Bearer-Token bezogen wird, welches in Entra ID hinterlegt wird, ist es ratsam dem Bearer-Token eine lange Gültigkeit zu erteilen. Dies kann im Advanced-Tab konfiguriert werden:

Die Gültigkeitsdauer des Bearer-Tokens sowie die Möglichkeit und Sinnhaftigkeit einer automatisierten Generierung und Speicherung in Entra ID werden in dieser Dokumentation nicht behandelt.
3. Konfiguration in Entra ID
In Entra ID muss eine Enterprise App erstellt werden, um die Verbindung zu Keycloak herzustellen.
Schritte zur Einrichtung:
- Im Menü Provisioning die Verbindung zum Keycloak-SCIM-Server einrichten.
- Die Tenant URL des SCIM-Endpunkts für die Benutzer-Provisionierung hinterlegen.
- Ein generiertes Bearer-Token als Secret Token in Entra ID hinterlegen (die Erstellung dieses Token wird im folgenden noch beschrieben).



Als Secret Token muss zunächst ein Bearer-Token über die im vorherigen Kapitel eingerichteten Client bezogen werden. Dies kann beispielsweise über folgendes Script erfolgen:
curl -s -X POST "<your keycloak server>/realms/rs02/protocol/openid-connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=keycloak02-scim-client01" \
-d "client_secret=<the client secret>" \
-d "grant_type=client_credentials" | jq -r '.access_token'
Das so erhaltene Token wird als Secret Token in der Enterprise App hinterlegt (s. oben).
Steuerung der Provisionierung
Im Menüpunkt Users and Groups kann definiert werden, welche Nutzer aus Entra ID nach Keycloak synchronisiert werden. So wird sichergestellt, dass nur relevante Benutzer provisioniert werden:

Entra ID synchronisiert Nutzer standardmäßig alle 40 Minuten. Dieses Intervall kann aktuell nicht geändert werden, jedoch besteht die Möglichkeit, die Synchronisation manuell über Start Provisioning oder für einzelne Nutzer/Gruppen on-demand durchzuführen.


Fazit
Die Nutzung von SCIM zur Synchronisation zwischen Entra ID und Keycloak ermöglicht eine weitgehend automatisierte Verwaltung von Benutzerkonten. Das Plugin SCIM for Keycloak bietet eine praktische Lösung für Unternehmen, die auf eine standardisierte Provisionierung setzen möchten. Allerdings sollte die Abhängigkeit von einem Drittanbieter sowie die Lizenzbedingungen berücksichtigt werden. Für größere Umgebungen kann es zudem sinnvoll sein, Performance-Aspekte und API-Limits zu analysieren.
Falls du nach einer flexibleren Alternative suchst, empfehle ich dir den Blogartikel Benutzer-Synchronisation zwischen Entra ID und Keycloak per Python-Skript. Dort wird erläutert, wie du eine individuell anpassbare Synchronisation direkt über die Keycloak- und Microsoft Graph-APIs realisieren kannst.
