gpt4 book ai didi

single-sign-on - 如何在Keycloak中初始化多个UserProvider

转载 作者:行者123 更新时间:2023-12-05 07:05:31 30 4
gpt4 key购买 nike

在尝试让 Keycloak 使用在 Keycloak 中实现的默认 JPA 提供程序时,我遇到了很大的困难(包:org.keycloak.models.jpa.JpaUserProviderFactory)与我的自定义 UserProvider 一起使用。

我的用户提供者是这样实现的:

public class MyCustomUserProviderFactory extends JpaUserProviderFactory {
@Override
public String getId() {
return "demo";
}

@Override
public UserProvider create(KeycloakSession session) {
EntityManager em = session.getProvider(JpaConnectionProvider.class).getEntityManager();
return new MyCustomUserProvider(session, em);
}
}

和 MyCustomUserProvider

public class MyCustomUserProvider extends JpaUserProvider {
private final KeycloakSession session;

public MyCustomUserProvider(KeycloakSession session, EntityManager em) {
super(session, em);
this.session = session;
}

}

启动.cli

/subsystem=keycloak-server/spi=user:add(default-provider=demo)
/subsystem=keycloak-server/spi=user/provider=jpa:add(enabled=true)
/subsystem=keycloak-server/spi=user/provider=demo:add(enabled=true)

也在我的 META-INF/服务中

org.keycloak.models.UserProviderFactory

与 com.demo.keycloak.providers.user.MyCustomUserProviderFactory

因此,通过此实现和设置,keycloak 已成功启动,但是当我需要同时访问演示和 jpa UserProvider 时,我只能获得在本例中为演示的默认提供程序。

我通过以下方式访问 UserProvider:

UserProvider demoProvider = session.getProvider(UserProvider.class, "demo");

但是如果我执行

UserProvider jpaProvider = session.getProvider(UserProvider.class, "jpa");

我只得到空值。如果我更改 startup.cli 中的默认提供程序 (default-provider=demo),我将获得 jpa 而不是演示提供程序。

有人可以向我解释如何实现多个 UserProvider 以及如何访问它们吗?

最佳答案

很抱歉很久没有回答我的问题。

不幸的是,无法同时拥有多个 JPAUserProvider。

在 JpaUserProvider 方法中添加自定义实现的唯一方法是覆盖它们添加额外的调用,并在配置本身中添加自定义版本作为默认版本/subsystem=keycloak-server/spi=user:add(default-provider=demo).

关于single-sign-on - 如何在Keycloak中初始化多个UserProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62714976/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com