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

4
当我们使用'KeycloakSpringBootConfigResolver'来从Spring Boot属性文件中读取keycloak配置而不是keycloak.json时。
现在有一些指南,可以通过覆盖'KeycloakConfigResolver'来实现使用keycloak的多租户应用程序,如http://www.keycloak.org/docs/2.3/securing_apps_guide/topics/oidc/java/multi-tenancy.html中所述。
这里定义的步骤只能与keycloak.json一起使用。我们如何将其适应于Spring Boot应用程序,以便从Spring Boot属性文件中读取keycloak属性并实现多租户。

为什么不使用keycloak.json呢?你可以使用多个json文件来定义领域,通过springboot实现多租户。 - Vuk Djapic
3个回答

1

如果您将org.keycloak.representations.adapters.config.AdapterConfig注入到组件中,您可以访问在application.yaml(或application.properties)中指定的keycloak配置。

@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);
    }

}

0
经过多次尝试,春季启动的唯一可行选项是:
  1. 使用不同的春季“配置文件”运行春季启动应用程序的多个实例。
  2. 每个应用程序实例可以拥有自己的keycloak属性(因为它位于不同的配置文件中),包括领域。
挑战在于为所有实例提供升级路径,以进行版本升级/错误修复,但我想这已经实现了多种策略(不属于本讨论的范围)。

0

关于这个问题已经有一张工单:https://issues.jboss.org/browse/KEYCLOAK-4139?_sscc=t。该工单的评论中也提到了可能需要干预所使用的服务(Tomcat/Undertow/Jetty)的servlet设置来尝试解决问题。

请注意,你在第一条评论中提供的文档已经非常过时了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接