Anbindung Keycloak an vorhandene Benutzerdatenbank (B2B)

Deprecated

Der Adapter wird seitens B2B nicht weiter unterstützt. Bitte migrieren Sie die Nutzer aus der B2B Datenbank nach Keycloak mit Hilfe des B2B-Migrationstools. Vgl. Sie hierzu auch die ReleaseNotes.

Keycloak Benutzerdatenbank Adapter

Einleitung

Um die Umstellung in der Anmeldung im ersten Schritt gering zu halten, stellen wir einen Adapter zur Verfügung, mit dem Keycloak sich gegen Benutzer aus einer B2B-Datenbank authentifiziert. Es wird der Benutzer aus der B2B-Datenbank abgefragt und das eingegebene Passwort verifiziert. Das Passwort muss mit dem in der B2B konfigurierten Hash-Algorithmus verifiziert werden.

Einrichtung

Zur Einrichtung des Adapters sind folgende drei Schritte notwendig:

  • Datenbanktreiber installieren

  • NLI-DB-Adapter installieren

  • Benutzerdatenbank in Keycloak konfigurieren

Datenbanktreiber

Sollte bei der Wahl des Installationsmodus von Keycloak (siehe Installation (Modus)) der Standalone Clustered Mode oder der Domain Clustered Mode gewählt worden sein, wurde in diesem Kontext bereits ein Datenbanktreiber installiert.

Hier wird die Installation in der Server Installation (Relational Database Setup) von Keycloak beschrieben.

Hier eine weitere gute Anleitung am Beispiel Oracle Treiber auf JBoss.

Im Kern sind folgende Schritte durchzuführen:

  • passenden JDBC Treiber herunterladen (z.B. postgresql-jdbc-9.1-902-Nofinalizer.jar)
  • paketiere den Treiber in ein Modul (inklusive module.xml) und installiere das Modul in Keycloak
  • Deklariere den Treiber in der Server Konfiguration (z.b. im standalone.xml)

Beispiel module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.postgresql">
	<resources>
		<resource-root path="postgresql-jdbc-9.1-902-Nofinalizer.jar"/>
	</resources>
	<dependencies>
		<module name="javax.api"/>
		<module name="javax.transaction.api"/>
		<module name="javax.servlet.api" optional="true"/>
	</dependencies>
</module>

Auszug aus dem standalone.xml

<datasources>
	<!-- ... -->
	<drivers>
		<driver name="postgresql" module="org.postgresql">
			<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
		</driver>
		<!-- ... -->
	</drivers>
</datasources>

Deployment DB-Adapter

Das Deployment des von NLI implementierten Service Provider Interfaces (SPI) ist hier kurz beschrieben:

Server Developer Guide (Registering provider implementations)

Grundsätzlich muss die von uns bereitgestellt jar-Datei (nli-user-storage-keycloak-VERSION.jar) in den Ordner standalone/deployments/ kopiert werden. Es findet ein Autodeployment statt.

Deployment


Weitere Information zu einem Deployment auf einem JBoss / WildFly können hier nachgelesen werden:

Latest WildFly Documentation (Application deployment)

Im Standalone Clustered Mode muss der Adapter auf jeder Instanz in oben genanntem Verzeichnis deployed werden.

Konfiguration in Keycloak

Für den relevanten Realm wird eine Benutzerdatenbank / User Federation konfiguriert. Darin müssen Datenbank URL, DB-Benutzer und DB-Passwort konfiguriert werden. Weiterhin sollte beim Produkt B2B gewählt werden.

Als Hashalgorithmus muss der in der B2B konfigurierte Algorithmus gewählt werden, siehe dazu auch Hashfunktion der Passwörter.

User Federation

Datenbanken

In dem auf dieser Seite beschriebenen Datenbankadapter für die Benutzerdatenbank wird ein jdbc-Treiber verwendet. Um die Wahl des Treibers dynamisch zu lassen, wurden drei Treiber als optionale Abhängigkeiten aufgenommen:

  • PostgreSQL (org.postgresql)
  • Oracle Database (com.oracle.ojdbc)
  • Microsoft SQL Server (com.microsoft.sqlserver)

Soll eine dieser Datenbanken verwendet werden, ist es notwendig, dass dieser bei der Installation den von uns ebenso verwendeten Namen hat.

Sollte ein anderer Datenbanktreiber verwendet werden, kann bei NLI angefragt werden, diesen in die Liste aufzunehmen. Alternativ kann der Treiber mit dem generischen Namen driver.jdbc installiert werden. Eine Abhängigkeit auf diesen generischen Namen ist ebenso optional enthalten.

Weitere Details sind bei der Installation von Keycloak im Abschnitt Datenbanktreiber nachzulesen.

Eine Derby-Datenbank wird von diesem Adapter nicht unterstützt.

deployment-structure

Dieser Abschnitt dient nur der Information.

Im Datenbankadapter wird folgende jboss-deployment-structure.xml mit ausgeliefert. Darin können die von uns ermöglichten Abhängigkeiten u.A. zu Datenbanktreibern nachgelesen werden.

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <!-- The code uses classes in these modules. These are probably optional to import if you are not using
                 Apache Http Client or the HttpClientBuilder that comes with the adapter core. -->
            <module name="org.apache.httpcomponents"/>
            <module name="org.keycloak.keycloak-core"/>
            <module name="org.keycloak.keycloak-server-spi"/>
            <module name="org.keycloak.keycloak-server-spi-private"/>
            <module name="org.keycloak.keycloak-services"/>
            <module name="org.apache.httpcomponents"/>
            <module name="org.postgresql" optional="TRUE"/>
            <module name="com.oracle.ojdbc" optional="TRUE"/>
            <module name="com.microsoft.sqlserver" optional="TRUE"/>
            <module name="driver.jdbc" optional="TRUE"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

Bekannte Probleme

  • Wenn der Datenbank-Adapter benutzt wird, dürfen nicht gleichnamige Benutzer in der Keycloak-Datenbank gespeichert werden, da diese von Keycloak bevorzugt benutzt werden.

  • Ein misslungener Login kann an einer falschen Passwort-Hash Strategie liegen: ob MD5 oder SHA-512 als Passwort Hash genutzt wird, ist in der Datenbank leicht an der Länge des Passwort-Hashes zu erkennen: SHA-512 ist deutlich länger.

View Me   Edit Me