如何注册Keycloak密码哈希服务提供商SPI

时间:2016-08-01 07:58:20

标签: keycloak keycloak-services

背景

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

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

2 个答案:

答案 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
相关问题