2

背景

我需要将定制应用程序的用户数据库迁移到 Keycloak。我创建了一个keycloak-add-user.json成功导入用户的文件。迁移的用户密码在原始系统中进行了哈希处理,但是我实现了一个 Keycloak Password Hash SPI 服务类,它使用现有算法来验证迁移用户的哈希值和盐值。Hash SPI 类从 Keycloak SPI 实现PasswordHashProviderFactoryPasswordHashProvider基于“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

这是基于 Federation SPI doco,但 Keycloak Password Hash SPI 的文档似乎不存在。我错过了什么,或者我需要做些什么来注册和使用我的哈希提供者和 Keycloak?

4

2 回答 2

1

在较新版本的 keycloak(我检查了 2.5.4)中,该文件需要META-INF/services/org.keycloak.credential.hash.PasswordHashProviderFactory

于 2017-03-16T06:42:08.663 回答
0

结果证明这是一个复制/粘贴错误 - 初始化文件的包名称“model”错误,而不是“hash”,因此与PasswordHashProviderFactory.

在提供者 jar 中,初始化文件需要命名:

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

并包含带有实现工厂类全名的单行 - 在这种情况下:

my.folder.MyPasswordHashProvider
于 2016-08-02T00:20:04.840 回答