【问题标题】:Azure website Rest Api only accept GET, POST returns 403. Possibly CORSAzure网站Rest Api只接受GET,POST返回403。可能是CORS
【发布时间】:2018-08-14 21:38:16
【问题描述】:

我遇到了一个奇怪的问题。我有一个在 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] Verbose Authenticated blah@blah.com 使用“会话 Cookie”身份验证成功。

【问题讨论】:

  • 看起来你的 JavaScript 客户端被 Authentication / Authorization 模块的 CSRF 保护阻止了,它目前不知道 CORS 配置(它可能应该知道)。在您的场景中,您的最终用户最初是如何登录的?
  • 我使用 chrome 对 AAD 和我的公司凭证进行身份验证。登录后,Azure 让 GET 请求顺利通过。我编辑了我的帖子以包含成功 GET 请求的日志。
  • 这有什么更新吗?我也遇到了同样的问题,但 Chrome 有一个错误会阻止设置用户代理。

标签: azure cors azure-web-app-service


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

就我而言,我必须删除:

来源:https://....

更改用户代理不起作用

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 2015-11-16
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多