返回

Spring Boot 3.1下与Keycloak集成方案

后端

在 Spring Boot 3.1 中拥抱无适配器的 Keycloak 集成

导言

Spring Boot 与 Keycloak 的无缝集成已成为往事。2 月 14 日,Keycloak 宣布弃用其 Spring Security 和 Spring Boot 适配器,迫使开发人员寻找替代方案。虽然这一消息可能会让人不安,但仍然有办法在 Spring Boot 3.1 中与 Keycloak 建立牢固的联系。

依赖注入

第一步是将 Keycloak 依赖项引入您的 pom.xml 文件:

<dependency>
  <groupId>org.keycloak</groupId>
  <artifactId>keycloak-spring-boot-starter</artifactId>
  <version>17.0.1</version>
</dependency>

Keycloak 配置

现在,在 Keycloak 管理控制台中,创建一个名为“spring-boot-app”的新客户端:

  • 客户端协议: OpenID Connect
  • 根 URL: http://localhost:8080

Spring Boot 配置

在 Spring Boot 应用程序中,通过在 application.properties 文件中添加以下配置,连接 Keycloak:

keycloak.realm=spring-boot-realm
keycloak.auth-server-url=http://localhost:8180/auth
keycloak.ssl-required=none

下一步,在您的 Spring Boot 应用程序中添加以下代码:

@SpringBootApplication
public class SpringBootApp {

  public static void main(String[] args) {
    SpringApplication.run(SpringBootApp.class, args);
  }

  @Configuration
  @EnableWebSecurity
  public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
      http.authorizeRequests()
          .antMatchers("/", "/error").permitAll()
          .anyRequest().authenticated()
          .and()
          .oauth2Login();
    }
  }
}

运行和测试

使用 mvn spring-boot:run 命令启动应用程序。在浏览器中导航到 http://localhost:8080,您应该会看到 Keycloak 登录页面。输入您的凭据并单击“登录”以访问 Spring Boot 应用程序的主页。

结论

尽管 Keycloak 适配器的弃用可能会让人望而生畏,但通过遵循本指南,您可以轻松地在 Spring Boot 3.1 中与 Keycloak 建立无缝连接。这种方法将使您能够继续利用 Keycloak 的强大安全功能,同时拥抱最新版本的 Spring Boot。

常见问题解答

  1. 这个过程是否适用于其他 Spring 版本?

    不,本指南专门针对 Spring Boot 3.1。

  2. 我可以在哪里找到 Keycloak 管理控制台?

    Keycloak 管理控制台可在 http://localhost:8180/auth/admin/ 控制台访问。

  3. 我如何配置 SSL 连接?

    在 application.properties 文件中设置 keycloak.ssl-required 为 all。

  4. 为什么我收到“OAuth2AuthenticationProcessingFilter 尚未配置”错误?

    确保您已在 Spring Security 配置中包含 oauth2Login() 方法。

  5. 我可以自定义 Keycloak 登录页面吗?

    是的,您可以通过 Keycloak 管理控制台的“主题”部分自定义登录页面。