2016-08-01 20 views
0

HintergrundWie Keycloak Passwort-Hash-Service Provider SPI

Ich brauche eine Benutzerdatenbank für eine maßgeschneiderte App in Keycloak registrieren zu migrieren. Ich habe eine keycloak-add-user.json Datei erstellt, die die Benutzer erfolgreich importiert. Kennwörter für migrierte Benutzer werden im Originalsystem gehashed. Ich habe jedoch eine Keycloak Password Hash-SPI-Serviceklasse implementiert, die den vorhandenen Algorithmus zur Überprüfung des Hash- und Salt-Werts eines migrierten Benutzers verwendet. Die Hash-SPI-Klasse implementiert PasswordHashProviderFactory und PasswordHashProvider aus dem Keycloak SPI und basiert auf `Pbkdf2PasswordHashProvider '.

public class MyPasswordHashProvider implements PasswordHashProviderFactory, PasswordHashProvider { 
public static final String ID = "XXXX"; 

Die Ausgabe

Wenn ein migrierten Benutzer mit keycloak einem Fehler zu authentifizieren versucht wird durch org.keycloak.hash.PasswordHashManager

Could not find hash provider XXXX for password 

angemeldet Mein Glas enthält eine Initialisierungsdatei META-INF/services/org.keycloak.models.PasswordHashProviderFactory mit einer einzigen Zeile mit dem Vollständiger Klassenname der HashProvider-Implementierung.

my.folder.MyPasswordHashProvider 

Dies wurde auf der Federation SPI doco basiert, aber Dokumentation für die Keycloak Passwort-Hash SPI scheint nicht vorhanden zu sein. Was fehlt mir oder was muss ich tun, um meinen Hash Provider mit Keycloak zu registrieren und zu nutzen?

Antwort

0

Es stellte sich heraus, dass dies ein Kopier-/Einfügefehler war - die Initialisierungsdatei hatte den falschen Paketnamen 'model' anstelle von 'hash' und stimmte daher nicht mit der PasswordHashProviderFactory überein.

Im Provider jar die Initialisierung Datei mit dem Namen werden muss:

META-INF/services/org.keycloak.credential.hash.PasswordHashProviderFactory 

und eine einzige Zeile mit dem vollen Namen der Umsetzung Factory-Klasse enthält - in diesem Fall:

my.folder.MyPasswordHashProvider 
1

In die neueren Versionen von keycloak (Ich überprüfte 2.5.4), die Datei muss META-INF/services/org.keycloak.credential.hash.PasswordHashProviderFactory

sein