一次 403 错误的排查实录:Spring Cloud Gateway、WebFlux、PingFederate 与 CORS
一次 403 错误的排查实录:Spring Cloud Gateway、WebFlux、PingFederate 与 CORS 一次真实的线上排错记录:一个看似 OAuth / JWT / Spring Security 的 403,最终却是 CORS 问题。 背景 我们在一次系统集成过程中,遇到了一个非常令人困惑的问题,涉及以下组件: Spring Cloud Gateway Spring Boot WebFlux 后端服务 PingFederate(OIDC / OAuth2) 本地运行的 React 前端( http://localhost:4200 ) 整体请求流程如下: 用户通过 PingFederate 登录(SSO) 前端获取 access token 前端发起 POST 请求 → Gateway → 后端服务 在以下场景中,一切都运行正常: 使用 Postman 直接调用后端 绕过 Gateway,直接调用后端 所有组件都在本地运行 但一旦请求通过 部署在 OpenShift 中的 Spring Cloud Gateway ,所有 POST 请求都会失败,并返回: 403 Forbidden 为什么这个问题如此迷惑 完全相同的 access token,在 Postman 中可以正常使用 GET 请求成功,POST 请求失败 系统中没有配置任何 role 或 scope 校验 不同环境下 401 / 403 的表现不一致 JWT 的 issuer、audience、签名全部正确 所有线索一开始都指向 OAuth 或 PingFederate 的配置问题——但这个判断是错误的。 关键线索:问题是如何被定位出来的 1. Postman 成功,浏览器失败 同一个请求,在不同客户端表现完全不同: Postman → 成功 浏览器(经 Gateway)→ 403 这一步非常关键,它强烈暗示: 问题并不在 token 本身 。 2. 在 Postman 中加上 Origin 头,请求立刻失败 我们在 Postman 中手动加入以下 header: O...