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

Spring Boot 3.2.3 OAuth2网关CSRF与授权路径404问题求助

问题解决思路与方案

问题根源分析

  1. POST请求CSRF 403错误:网关作为OAuth2客户端默认启用CSRF保护,但你的API接口基于JWT资源服务器模式,无需CSRF验证,网关错误地对API POST请求应用了CSRF检查。
  2. 修改CSRF配置后出现404:之前的网关SecurityConfig完全覆盖了默认配置,未保留OAuth2客户端核心配置,导致Spring Security未注册授权端点/oauth2/authorization/lot-games-client-authorization-code,引发404。

正确的网关SecurityConfig配置

需要同时保留OAuth2客户端配置,针对API路径禁用CSRF,针对前端页面路径启用CSRF保护(符合OAuth2授权码模式安全要求):

@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {

    @Bean
    SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
        http
            // 保留OAuth2客户端默认配置,确保授权端点注册正常
            .oauth2Client(Customizer.withDefaults())
            // 自定义CSRF规则:API路径跳过检查,其他路径启用
            .csrf(csrf -> csrf
                .requireCsrfProtectionMatcher(exchange -> {
                    String path = exchange.getRequest().getPath().value();
                    return !path.startsWith("/lot-games/api/");
                })
            )
            // 请求授权规则配置
            .authorizeExchange(exchanges -> exchanges
                .pathMatchers("/lot-games/api/**").permitAll()
                .anyExchange().authenticated()
            )
            // 启用OAuth2登录流程,适配前端授权跳转
            .oauth2Login(Customizer.withDefaults());

        return http.build();
    }
}

关键配置说明

  • oauth2Client(Customizer.withDefaults()):保留OAuth2客户端核心配置,确保授权端点/oauth2/authorization/xxx被正确注册,解决404问题。
  • CSRF规则:通过requireCsrfProtectionMatcher自定义匹配逻辑,只对非API路径启用CSRF,API路径跳过检查,解决POST请求403错误。
  • oauth2Login(Customizer.withDefaults()):启用OAuth2登录流程,适配前端的授权跳转需求。

额外验证点

  1. 确认React前端发送API请求时,正确携带JWT Token(通常放在Authorization: Bearer <token>请求头中)。
  2. 资源服务器已正确禁用CSRF,无需调整现有配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:55:16