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

Spring Boot微服务问题:添加Auth服务后网关请求报CSRF令牌缺失403错误

问题描述

在通过API网关向其他服务发送请求时出现异常,添加Auth服务后触发403 Forbidden错误,具体提示:

An expected CSRF token cannot be found (403 Forbidden)

需求是完成身份验证后可向其他服务发送任意请求,推测问题出在API网关,但无法定位解决。

环境准备命令

启动所有服务前,需在Docker中运行Zipkin和Redis,执行以下命令:

docker run -d -p 9411:9411 openzipkin/zipkin 
docker run -d --name redis -p 6379:6379 redis
解决方案

针对API网关出现的CSRF令牌缺失问题,可根据服务架构选择以下方案:

  • 方案一:关闭服务间调用的CSRF防护
    若API网关仅用于服务间通信(非面向浏览器前端),可直接关闭CSRF防护。在Spring Security配置类中添加如下代码:

    @Configuration
    public class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http.csrf(csrf -> csrf.disable()); // 关闭CSRF防护
            // 其他身份验证相关配置
            return http.build();
        }
    }
    
  • 方案二:配置CSRF忽略路径
    若需保留部分路径的CSRF防护,可针对服务间调用的路径添加忽略规则:

    @Configuration
    public class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http.csrf(csrf -> csrf
                    .ignoringRequestMatchers("/api/**") // 忽略指定前缀的服务间调用路径
            );
            // 其他身份验证相关配置
            return http.build();
        }
    }
    
  • 方案三:传递CSRF令牌
    若必须保留CSRF防护,需在请求中携带CSRF令牌:

    1. 从Auth服务获取CSRF令牌(可通过登录接口返回或/csrf端点获取)
    2. 在后续请求的请求头中添加X-XSRF-TOKEN,值为获取到的令牌
    3. 确保API网关和下游服务均配置了CSRF令牌的解析规则

额外排查要点

  • 检查API网关的Spring Security配置,确认添加Auth服务后是否自动启用了CSRF防护
  • 验证下游服务是否开启CSRF防护,服务间调用无需该防护的话建议统一关闭
  • 查看请求日志,确认请求是否携带正确的身份验证信息(如JWT令牌),避免因身份验证失败被误判为CSRF问题

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:55:22