CORS与Spring Security上的承载认证

时间:2018-06-06 10:14:40

标签: spring security spring-security cors

在我的设置中,我在zuul gatway后面有一个服务,配置了Spring Security;我的客户端是一个向网关执行AJAX请求的简单网站。

我将CrossOrigin-Annotation放在服务控制器的端点上,因此直接向服务传递请求, 将请求指向网关当前最终在我的OPTIONS请求中出现401错误。

似乎授权标头的请求没有达到Spring Security,因为现在不允许使用此标头。

目前,我将WebSecurityConfigurerAdapter扩展为允许所有选项请求。

编辑: 问题:如何将Spring Security配置为不要求对OPTIONS-requests进行身份验证?

EDIT2: 我使用相关代码创建了GIST

  • 客户:hello.jsindex.html
  • 网关:WebSecurityonfig.javaSimpleCORSFilter.javaGatewayApp.java
  • 服务:ContactController.java

EDIT2: 在收集了有关OPTIONS-Preflight和Spring(安全)的更多信息后,似乎问题来自Spring Security。

我们使用承载令牌来授权客户端,因此浏览器会向服务器发送OPTIONS-Preflight请求。服务器由Spring Security保护,Spring Security找不到有效的授权标头,因此返回401-unauthorized

2 个答案:

答案 0 :(得分:1)

您必须在CrossOrigin注释中指定允许的来源。

@CrossOrigin(origins = "http://allowed-domain.com")

这里有一个例子:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework

答案 1 :(得分:0)

我知道我的答案有点偏离主题,但我通常处理这个问题的方法是使用http服务器(如nginx)。此服务器是后端或前端的前端和重定向请求(因此,从浏览器的视图来看,所有服务器都在同一个域中)。