背景
我需要将定制应用的用户数据库迁移到Keycloak。我创建了一个keycloak-add-user.json
文件,可以成功导入用户。迁移的用户密码在原始系统中进行哈希处理,但是我已经实现了Keycloak Password Hash SPI服务类,该服务类使用现有算法来验证迁移用户的哈希值和salt值。 Hash SPI类从Keycloak SPI实现PasswordHashProviderFactory
和PasswordHashProvider
,并基于`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
我的jar包含一个初始化文件META-INF/services/org.keycloak.models.PasswordHashProviderFactory
,其中一行包含HashProvider实现的完整类名。
my.folder.MyPasswordHashProvider
这是基于联邦SPI doco,但Keycloak Password Hash SPI的文档似乎不存在。我错过了什么,或者我需要做些什么才能在Keycloak中注册和使用我的哈希提供者?
答案 0 :(得分:1)
在较新版本的keycloak(我检查过2.5.4)中,文件需要为META-INF/services/org.keycloak.credential.hash.PasswordHashProviderFactory
答案 1 :(得分:0)
原来这是一个复制/粘贴错误 - 初始化文件包含错误的包名'model'而不是'hash',因此与PasswordHashProviderFactory
不匹配。
在提供者jar中,初始化文件需要命名为:
META-INF/services/org.keycloak.credential.hash.PasswordHashProviderFactory
并包含一行,其中包含实现工厂类的全名 - 在本例中为:
my.folder.MyPasswordHashProvider