使用特定的 Maven 配置文件运行 Spring Boot 应用程序时如何禁用 Keycloak 身份验证?

问题描述

我有一个minimal Spring Boot based application。它旨在作为开发实际应用程序的模板。也就是说,人们应该克隆这个项目并在其上构建真正的应用程序。

在生产中使用时,端点应使用 Keycloak 进行保护。在本地开发期间,应禁用此身份验证。

为了实现这一点,我创建了一个配置文件 local-dev 并在 pom.xml 中激活它:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <profiles>
                    <profile>local-dev</profile>
                </profiles>
            </configuration>
        </plugin>
    </plugins>
</build>

使用 local-dev 配置文件运行时,应遵循以下 security configuration

@Configuration
@Slf4j
@Profile("local-dev")
public class DevSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        log.warn("Using configuration Dev Security Conf");

        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();

        http.cors();

    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/**");
    }

    @Bean
    @Scope(scopeName = WebApplicationContext.ScopE_REQUEST,proxyMode = ScopedProxyMode.TARGET_CLASS)
    public Accesstoken accesstoken() {
        Accesstoken accesstoken = new Accesstoken();
        accesstoken.setSubject("abc");
        accesstoken.setName("Tester");

        return accesstoken;

    }
}

但是,如果

  1. 我使用 mvn clean spring-boot:run
  2. 启动应用程序
  3. 在浏览器中打开 http://localhost:8092/test/,

我看到以下错误

java.lang.IllegalArgumentException: You did not supply enough values to fill path parameters
    at org.keycloak.common.util.KeycloakUriBuilder.buildFromValues(KeycloakUriBuilder.java:577) ~[keycloak-common-11.0.2.jar:11.0.2]
    at org.keycloak.common.util.KeycloakUriBuilder.build(KeycloakUriBuilder.java:571) ~[keycloak-common-11.0.2.jar:11.0.2]
    at org.keycloak.adapters.KeycloakDeployment.setAuthServerBaseUrl(KeycloakDeployment.java:142) ~[keycloak-adapter-core-11.0.2.jar:11.0.2]
    at org.keycloak.adapters.KeycloakDeploymentBuilder.internalBuild(KeycloakDeploymentBuilder.java:139) ~[keycloak-adapter-core-11.0.2.jar:11.0.2]
    at org.keycloak.adapters.KeycloakDeploymentBuilder.build(KeycloakDeploymentBuilder.java:202) ~[keycloak-adapter-core-11.0.2.jar:11.0.2]

这意味着 Keycloak 没有完全关闭

如何确保在使用 local-dev 配置文件运行应用程序时禁用 Keycloak?

a similar question 的大部分答案都没有帮助。

更新 1:我通过以下方式更改了代码

  1. 删除
autoconfigure:
exclude = org.keycloak.adapters.springboot.KeycloakAutoConfiguration

来自application-local-dev.yml

  1. 删除
security.basic.enabled: false
management.security.enabled: false

来自application-local-dev.yml

  1. 添加
keycloak:
enabled: false

application-local-dev.yml

此后Keycloak相关的异常消失,浏览器的错误信息变为

Whitelabel Error Page

This application has no explicit mapping for /error,so you 
are seeing this as a fallback.
Fri Feb 19 09:59:11 CET 2021
There was an unexpected error (type=Not Found,status=404).

解决方法

我个人所做的,我没有在项目本身中包含任何安全性或其他配置,我只是在 CICD 过程中从 GitLab 环境变量或从其他路径/存储库获取它们。因此,就我而言,所有应用/微服务都在开箱即用的非安全模式下运行,以方便开发人员使用。