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

Nam*_*Ngo 3 azure cors azure-web-app-service

我遇到了一个奇怪的问题。我有一个在 Azure 应用服务(网站)下运行的 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 发现站点“blah.azurewebsites.net”的“AppServiceAuthSession”cookie。长度:856。

2016-07-28T08:14:26 PID[x] 信息发送响应:403.60 Forbidden

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

我正在使用 Asp.net Core 1.0。我在我的代码 (AllOrigin AllHeader) 中启用了 CORS,并且 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] 详细发现站点“blah.azurewebsites.net”的“AppServiceAuthSession”cookie。长度:876。

2016-07-28T20:24:36 PID[22880] 详细身份验证 blah@blah.com 成功使用“会话 Cookie”身份验证。

Chr*_*lum 5

看起来您的 JavaScript 客户端被身份验证/授权模块的 CSRF 保护阻止了,它目前不知道 CORS 配置(它可能应该 - 我会调查一下)。

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