keycloak 自定义登录提供程序未在版本 19 中调用

问题描述 投票:0回答:1

我们使用带有 keycloak 18 版本的自定义登录提供程序,一切正常。

但是当我们升级到 keycloak 版本 19 时,自定义登录提供程序不会被调用。

在下面的示例中,我们可以看到应该调用 CustomProviderFactory create 方法,它适用于 keycloak 18 版本,但不适用于 keycloak 19 版本。所有 jboss 部署.xml 都已就位。

例如

public class CustomProviderFactory extends FreeMarkerLoginFormsProviderFactory {
private FreeMarkerUtil freeMarker;

    @Override
    public LoginFormsProvider create(KeycloakSession session) {
        return new CustomLoginFormsProvider(session, freeMarker);
    }

    @Override
    public void init(Config.Scope config) {
        freeMarker = new FreeMarkerUtil();
    }

    @Override
    public void close() {
        freeMarker = null;
    }

    @Override
    public String getId() {
        return "freemarker";
    }

}

public class CustomLoginFormsProvider extends FreeMarkerLoginFormsProvider {

   
    public LoginFormsProvider(KeycloakSession session, FreeMarkerUtil freeMarker) {
        super(session, freeMarker);
    }

    @Override
    protected void createCommonAttributes(Theme theme, Locale locale, Properties messagesBundle, UriBuilder baseUriBuilder, LoginFormsPages page) {
        super.createCommonAttributes(theme, locale, messagesBundle, baseUriBuilder, page);
        
    }

}
java keycloak openid-connect keycloak-services keycloak-spi
1个回答
0
投票

我使用的是Keycloak 22.0.5

我需要设置这些属性 - 我在 Keycloak 启动命令行上执行此操作: ... --spi-login-provider=
--spi-login--enabled=true
...

我的工厂类扩展 FreeMarkerLoginFormsProviderFactory 的地方

我没有对 getId() 返回的字符串使用 freemarker;我用的是我自己的ID。

我将 ID 设置为类似于扩展 FreeMarkerLoginFormsProvider 的类的类名称

例如,如果我的自定义类被命名为:

公共类 MyGoodClass 扩展 FreeMarkerLoginFormsProvider { ... }

公共类 MyGoodClassFactory 扩展 FreeMarkerLoginFormsProviderFactory { ... }

我在 MyGoodClassFactory 中使 getId() 方法返回 my-good-class:

@Override
public String getId() {
    return "my-good-class";
}

那么属性设置将是:

... --spi-login-provider=我的好班级 --spi-login-my-good-class-enabled=true
...

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.