我使用Angular前端连接到WEB API 2后端.失败的用例如下.当用户注册成功注册后,他们必须登录系统并重定向到新页面以收集更多信息.我正在使用TOKENS进行身份验证.
我在WebAPI配置中启用了CORS:
var cors = new EnableCorsAttribute("http://localhost:7812","*","*"); config.EnableCors(cors);
注册请求成功,响应头具有所需的CORS头:
**Access-Control-Allow-Credentials:true Access-Control-Allow-Origin:http://localhost:7812** Content-Length:0 Date:Sun,24 Aug 2014 09:31:55 GMT Server:Microsoft-IIS/8.0 X-Powered-By:ASP.NET X-SourceFiles:=?UTF-8?B?QzpcUHJvamVjdHNcVGVzdGluZ1xNYWx0QXBhcnRtZW50c1xNYWx0YXBhcnRtZW50cy5BUElcTWFsdGFwYXJ0bWVudHMuQVBJXGFwaVxhY2NvdW50XHJlZ2lzdGVy?=
在下一步中,我尝试将用户登录到系统.作为登录的一部分,前端通过请求URL从服务器请求TOKEN:http:// localhost:7802 / token.请求头再次发送一个Origin头Origin:http:// localhost:7812但这次我得到错误:XMLHttpRequest无法加载http:// localhost:7802 / token.请求的资源上不存在“Access-Control-Allow-Origin”标头.因此不允许Origin’http:// localhost:7812’访问.
有人有主意吗?
解决方法
在处理CORS时,我们需要记住,浏览器可能会针对非GET请求发送两个请求.通常有预检(OPTIONS)请求,然后是实际请求(POST).在预检请求期间,服务器需要添加Access-Control-Allow-Origin标头,其值与请求Origin标头匹配.这授权发送后续请求.
对于后续/实际请求,服务器还需要添加Access-Control-Allow-Origin标头.否则,此请求失败.
使用OWIN OAuthAuthorizationServerProvider时,我们需要自定义MatchEndpoint处理程序来管理标头逻辑.此处理程序在验证客户端身份验证之前执
有关更多背景信息,请查看此链接:http://www.ozkary.com/2016/04/web-api-owin-cors-handling-no-access.html