Azure网站Rest Api只接受GET,POST返回403.可能是CORS

时间:2016-07-28 08:18:44

标签: azure cors azure-web-sites

我遇到一个奇怪的问题。我有一个在Azure App Service(网站)下运行的Asp.net Core WebApi项目。我在Chrome中使用DHC插件。我的服务也在使用AAD。

我可以请求GET方法(登录后)。但是,当我请求任何POST时,我得到了403响应。在日志中查看,我可以看到这个

  

2016-07-28T08:14:26 PID [x]详细收到请求:POST https://blahblah.azurewebsites.net/api/build/beep/

     

2016-07-28T08:14:26 PID [x] Verbose Found' AppServiceAuthSession'网站的cookie' blah.azurewebsites.net'。长度:856。

     

2016-07-28T08:14:26 PID [x]信息发送回复:403.60禁止

     

2016-07-28T08:14:26 PID [x]警告为用户检测到跨站请求伪造' blah@blahblah.com'来自referer''!

我使用的是Asp.net Core 1.0。我的代码中有CORS启用(AllOrigin AllHeader),以及Azure网站中的CORS有一个条目,用于' *',它应该接受每个来源。日志流似乎甚至没有打到我的网站,但Azure中的某些东西会阻止请求。

任何帮助?

编辑: 一个成功的GET方法

  

2016-07-28T20:24:35 PID [22880]详细收到请求:GET https://blah.azurewebsites.net/api/build/beep/

     

2016-07-28T20:24:35 PID [22880] Verbose Found' AppServiceAuthSession'网站的cookie' blah.azurewebsites.net'。长度:876。

     

2016-07-28T20:24:36 PID [22880]详细认证blah@blah.com成功使用'会话Cookie'认证

2 个答案:

答案 0 :(得分:3)

看起来您的JavaScript客户端被身份验证/授权模块的CSRF保护阻止,该保护目前还不了解CORS配置(可能应该 - 我会对此进行调查)

解决此问题的最简单方法是在客户端设置中添加自定义 User-Agent HTTP标头。我们内置的CSRF保护所寻求的一个方面是客户端是否是浏览器。几乎所有主流浏览器都使用" Mozilla /..."作为用户代理字符串。将此更改为其他内容,以明确您不是浏览器,并且您的POST请求将成功完成。

答案 1 :(得分:0)

就我而言,我必须删除:

来源:https:// ....

更改User-Agent无效