Spring Boot集成Okta SP发起SSO,React调用接口302重定向触发CORS问题
问题根因
你遇到的CORS错误核心诱因不是Spring或Okta的可信源配置漏加,而是:
OIDC SP发起的授权流程本身依赖浏览器整页跳转,你使用Axios(异步AJAX请求)调用登录接口时,Spring返回302重定向到Okta授权端点,浏览器会强制校验重定向目标(Okta域名)的CORS响应头,而Okta的公开授权端点默认不会返回允许你前端域名跨域访问的头,因此触发CORS错误。
解决方案
方案1:调整前端登录逻辑(推荐,符合OIDC标准流程)
不要用AJAX请求调用Spring Boot的登录端点,直接做整页跳转即可:
// 替换原axios调用逻辑 window.location.href = 'http://localhost:8080/api/login'
用户完成Okta登录后会自动跳转回你配置的重定向地址,后续请求自动携带登录态Cookie即可正常访问接口。
方案2:前后端完全分离token模式
如果不想做整页跳转,直接在React端集成Okta官方前端SDK,由前端主动发起OIDC授权流程,拿到access_token后,在所有请求的Header中携带Authorization: Bearer {token}调用Spring Boot接口,Spring Boot侧配置为资源服务器校验令牌即可。
现有Spring配置需要修正的点
- 你的CORS配置中
allowedOrigins配置为*,同时请求携带了Cookie(withCredentials=true),浏览器默认禁止这种组合,需要将允许源改为你React应用的具体域名,同时显式开启允许凭证:
configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000")); // 替换为你的前端实际地址 configuration.setAllowCredentials(true); // 新增这行
- 你只声明了CorsConfigurationSource Bean,没有在Spring Security的HttpSecurity配置中启用CORS,需要补充配置:
@Override protected void configure(HttpSecurity http) throws Exception { http .cors() // 启用CORS,读取你声明的CorsConfigurationSource配置 .and() // 保留你原有的其他安全配置即可 .authorizeRequests() .anyRequest().authenticated(); }
内容的提问来源于stack exchange,提问作者softechie
相关产品推荐
相关产品推荐

