You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3(Java17)中OAuth 2.0已弃用,如何实现安全认证?

针对Spring Boot 3 + Java 17的OAuth2认证方案(部署到GCP场景)

首先明确:OAuth 2.0协议本身并未被弃用,你看到的"弃用"应该是Spring生态中旧版的OAuth2依赖(如spring-security-oauth2)被标记为废弃,当前Spring官方推荐使用全新的spring-security-oauth2-authorization-server(自建授权服务器)、spring-security-oauth2-client(客户端角色)、spring-security-oauth2-resource-server(资源服务器角色)模块来实现OAuth2认证。

结合你要部署到GCP的需求,提供两种落地方案:

方案一:使用GCP原生身份服务(推荐)

依托GCP托管的身份服务,无需自行维护授权服务器,集成成本低、高可用:

  • 核心组件:Google Identity Platform 或 Cloud Identity-Aware Proxy(IAP)
  • Spring Boot配置步骤:
    1. 引入依赖:
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
      </dependency>
      
    2. 在application.yml中配置JWT验证:
      spring:
        security:
          oauth2:
            resourceserver:
              jwt:
                issuer-uri: https://accounts.google.com
      
    3. 编写安全过滤链配置:
      @Configuration
      @EnableWebSecurity
      public class SecurityConfig {
          @Bean
          public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
              http
                  .authorizeHttpRequests(auth -> auth
                      .anyRequest().authenticated()
                  )
                  .oauth2ResourceServer(oauth2 -> oauth2
                      .jwt(Customizer.withDefaults())
                  );
              return http.build();
          }
      }
      
  • 优势:和GCP服务(Cloud Run、GKE、Cloud Functions等)深度集成,自带SSL、访问控制、日志监控能力,无需自行维护授权服务器。

方案二:在GCP部署Keycloak(自定义身份管理)

如果需要自定义用户体系、角色权限逻辑,可将Keycloak部署到GCP:

  • Keycloak部署方式:
    • 用Cloud Run托管Keycloak容器(Serverless,按需扩缩容)
    • 用GKE部署Keycloak集群(适合高并发场景)
    • 用Compute Engine部署虚拟机运行Keycloak(传统部署方式)
  • Spring Boot集成步骤:
    1. 引入依赖(同方案一,用oauth2-resource-server和oauth2-client)
    2. 配置Keycloak作为授权服务器:
      spring:
        security:
          oauth2:
            resourceserver:
              jwt:
                issuer-uri: https://your-keycloak-domain/realms/your-realm-name
      
    3. 安全过滤链配置可额外添加角色权限控制:
      // 示例:限制特定角色访问接口
      .authorizeHttpRequests(auth -> auth
          .requestMatchers("/admin/**").hasRole("ADMIN")
          .anyRequest().authenticated()
      )
      
  • 注意事项:在GCP控制台配置Keycloak的公网访问(如负载均衡、SSL证书),确保Spring应用能访问Keycloak的/.well-known/openid-configuration端点。

关键注意点

  1. Spring Boot 3搭配的Spring Security 6对OAuth2的配置做了简化,无需旧版的@EnableOAuth2Sso等注解,直接通过SecurityFilterChain配置即可。
  2. 无论哪种方案,都要确保应用的JWT验证逻辑正确,通过issuer-uri自动获取公钥,无需手动配置密钥。

内容的提问来源于stack exchange,提问作者Clementine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:15:01