gpt4 book ai didi

javascript - CORS 干扰 Spring Security oauth2

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:28 25 4
gpt4 key购买 nike

我在尝试从浏览器的 oauth/token 获取 token 时遇到问题。我有一个带有 Spring Security 和 Spring Security oauth 的 Spring Boot 应用程序,我正在尝试从不同端口的 javascript SPA 进行身份验证。

当后端禁用 CORS 时,我可以使用 Postman 或终端从 oauth 端点毫无问题地获取 token ,但我无法从 javascript 获取它们,因为 CORS 预检失败。

如果我启用 CORS,预检成功,但现在我得到一个 InsufficientAuthenticationException“没有客户端身份验证。尝试添加适当的身份验证过滤器”。据我所知,那是因为 Spring Security 无法从请求中获取主体。

有人对如何处理这个问题有建议吗?

最佳答案

显然,Oauth2 端点和过滤器在到达 Spring Security 过滤器链之前得到处理,因此添加 CORS 过滤器通常不会起作用,但添加具有高优先级的 CORS 过滤器 bean 最终会起作用。

这是我的CORS专用配置类(改编自官方spring指南,稍后我会调整它)

@Configuration
public class CorsConfig {
//IMPORTANT: it has to be a normal configuration class,
//not extending WebMvcConfigurerAdapter or other Spring Security class
@Bean
public FilterRegistrationBean customCorsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("http://localhost:3000");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));

//IMPORTANT #2: I didn't stress enough the importance of this line in my original answer,
//but it's here where we tell Spring to load this filter at the right point in the chain
//(with an order of precedence higher than oauth2's filters)
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
}

关于javascript - CORS 干扰 Spring Security oauth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44427171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com