single-sign-on - 如何在 Keycloak 中初始化多个 UserProviders
问题描述
我在尝试让 Keycloak 使用在 Keycloak(包:org.keycloak.models.jpa.JpaUserProviderFactory)中实现的默认 JPA 提供程序以及我的自定义 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/service 我也有
org.keycloak.models.UserProviderFactory
与 com.demo.keycloak.providers.user.MyCustomUserProviderFactory
因此,通过此实现和设置,keycloak 已成功启动,但是当我需要同时访问 demo 和 jpa UserProvider 时,我只能获得默认提供程序,即在本例中为 demo。
我通过以下方式访问 UserProvider:
UserProvider demoProvider = session.getProvider(UserProvider.class, "demo");
但如果我执行
UserProvider jpaProvider = session.getProvider(UserProvider.class, "jpa");
我只得到空值。如果我更改了 startup.cli (default-provider=demo) 中的默认提供程序,我将获得 jpa 而不是演示提供程序。
有人可以向我解释我如何拥有多个 UserProvider 实现以及如何访问它们?
解决方案
推荐阅读
- java - 模型映射器计算
- javascript - 为什么 getuserMedia 音频在 Mac OS 的 Safari 11.1 中不起作用
- c# - 在 selenium 中处理动态 div
- amazon-web-services - 如何为 AWS Lambda 设置重试超时
- ios - 无法使用 Xcode 9 创建 xcarchive 到 ipa
- java - 移动模拟器 Selenium 测试在 Jenkins 中失败,但在 cmd 中失败
- ios - IOS 上的 PWA 和离线存储
- reactjs - 无法读取未定义的属性“组件”
- spring-boot - How to using annotation @RefreshScope with spingboot : connectionFactory?
- android - Custom Notification tray doesn't work for some phones