Как зарегистрировать поставщик услуг хеширования паролей Keycloak SPI

Фон

Мне нужно перенести базу данных пользователей для специального приложения в Keycloak. Я создал keycloak-add-user.json файл, который успешно импортирует пользователей. Перенесенные пароли пользователей хешируются в исходной системе, однако я реализовал служебный класс Keycloak Password Hash SPI, который использует существующий алгоритм для проверки хеш-значения и значения соли перенесенного пользователя. Класс Hash SPI реализует PasswordHashProviderFactory и PasswordHashProvider из Keycloak SPI и основан на `Pbkdf2PasswordHashProvider '.

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

Проблема

Когда мигрировавший пользователь пытается аутентифицироваться с помощью keycloak, org.keycloak.hash.PasswordHashManager регистрирует ошибку.

Could not find hash provider XXXX for password

Моя банка содержит файл инициализации META-INF/services/org.keycloak.models.PasswordHashProviderFactory с единственной строкой, содержащей полное имя класса реализации HashProvider.

my.folder.MyPasswordHashProvider

Это было основано на документации Federation SPI, но документации для Keycloak Password Hash SPI, похоже, не существует. Что мне не хватает или что мне нужно сделать, чтобы зарегистрироваться и использовать моего поставщика хеширования с Keycloak?


person shonky linux user    schedule 01.08.2016    source источник


Ответы (2)


В более новых версиях keycloak (я проверял 2.5.4) файл должен быть META-INF/services/org.keycloak.credential.hash.PasswordHashProviderFactory

person user31482    schedule 16.03.2017

Это оказалось ошибкой копирования / вставки - файл инициализации имел неправильное имя пакета «модель», а не «хэш» и, следовательно, не соответствовал PasswordHashProviderFactory.

В банке провайдера файл инициализации должен быть назван:

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

и содержать одну строку с полным именем класса фабрики реализации - в данном случае:

my.folder.MyPasswordHashProvider
person shonky linux user    schedule 02.08.2016
comment
Привет, мне также нужен пользовательский поставщик хешей. Я сделал то же самое с вами вот так, но при запуске Keycloak через standalone.sh произошли ошибки: Caused by: org.keycloak.models.ModelException: Invalid config for hashAlgorithm: Password hashing provider not found Так вы когда-нибудь настраивали что-нибудь для hashAlgorithm? - person user2896821; 14.05.2019