使用Keycloak和springboot实现多租户应用程序

时间:2017-09-22 10:16:04

标签: spring spring-boot keycloak

当我们使用'KeycloakSpringBootConfigResolver'从springboo属性文件而不是keycloak.json中读取keycloak配置时。

现在有指导方针通过覆盖http://www.keycloak.org/docs/2.3/securing_apps_guide/topics/oidc/java/multi-tenancy.html中指定的'KeycloakConfigResolver'来使用keycloak实现多租户应用程序。

此处定义的步骤只能与keycloak.json一起使用 我们如何使其适应Spring引导应用程序,以便从spring boot属性文件中读取keycloak属性并实现多租户。

3 个答案:

答案 0 :(得分:0)

经过多次试验,弹簧靴的唯一可行选择是

  1. 使用不同弹簧'配置文件'运行的弹簧启动应用程序的多个实例。
  2. 每个应用程序实例都可以拥有自己的keycloak属性(因为它位于不同的配置文件下),包括领域。
  3. 挑战是为版本升级/错误修复的所有实例建立升级路径,但我想已经实施了多种策略(不是讨论的一部分)

答案 1 :(得分:0)

有关于此问题的故障单:https://issues.jboss.org/browse/KEYCLOAK-4139?_sscc=t 该票证的评论还讨论了干预所使用服务(Tomcat / Undertow / Jetty)的servlet设置的可能的解决方法,您可以尝试。

请注意,您在第一条评论中链接的文档已经过时了!

答案 2 :(得分:0)

如果将org.keycloak.representations.adapters.config.AdapterConfig注入组件,则可以访问在application.yaml(或application.properties)中保护的密钥斗篷配置。

@Component
public class MyKeycloakConfigResolver implements KeycloakConfigResolver {

    private final AdapterConfig keycloakConfig;

    public MyKeycloakConfigResolver(org.keycloak.representations.adapters.config.AdapterConfig keycloakConfig) {
        this.keycloakConfig = keycloakConfig;
    }

    @Override
    public KeycloakDeployment resolve(OIDCHttpFacade.Request request) {
        // make a defensive copy before changing the config
        AdapterConfig currentConfig = new AdapterConfig();
        BeanUtils.copyProperties(keycloakConfig, currentConfig);

        // changes stuff here for example compute the realm

        return KeycloakDeploymentBuilder.build(currentConfig);
    }

}
相关问题