我遇到一个奇怪的问题。我有一个在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'认证
答案 0 :(得分:3)
看起来您的JavaScript客户端被身份验证/授权模块的CSRF保护阻止,该保护目前还不了解CORS配置(可能应该 - 我会对此进行调查)
解决此问题的最简单方法是在客户端设置中添加自定义 User-Agent HTTP标头。我们内置的CSRF保护所寻求的一个方面是客户端是否是浏览器。几乎所有主流浏览器都使用" Mozilla /..."作为用户代理字符串。将此更改为其他内容,以明确您不是浏览器,并且您的POST请求将成功完成。
答案 1 :(得分:0)
就我而言,我必须删除:
来源:https:// ....
更改User-Agent无效