我有一个 Azure 应用服务,具有基于 Azure Active Directory 的强制身份验证。它为 API 服务器和调用该服务器的 Web 应用程序提供服务。
所有的 GET 工作都完美,但是 POST 都被拒绝了
403 Forbidden
。
Cookie 已正确设置以通过身份验证检查。
奇怪的是,当我用 Postman 重放 POST 时,他们成功了。 我可以缩小导致拒绝的差异:
每当
标题为User-Agent
Mozilla/5.0
为什么Azure中有这样的机制?如何停用?
深入研究建议后,我可以验证这不是 CORS 问题,也不完全是需要更改的用户代理。
实际上 Chrome 浏览器自 2022-06-06 起不支持 User-Agent 更新,因此无法选择此选项。
解决方案的想法来自https://github.com/Azure/azure-functions-host/issues/1602#issuecomment-309532954
并专注于修复,在
App Service
/ Authentication
:
https://{name}.azurewebsites.net
此后,POST 请求生效。
我在非跨源场景中遇到了同样的问题,但对我来说Benjam的答案不起作用,因为(后来证明)浏览器既没有发送源(实际上发送了
null
)也没有发送引用标头 - 因此没有任何内容与重定向 URL 匹配。
我建议检查并评估 Benjam 的答案中提到的线程中列出的所有 CSRF 规则。
Referrer-Policy: no-referrer
设置,导致浏览器忽略引用标头。放宽政策后,POST 请求就通过了。