我正在使用 MS Azure 开发一个 Web 应用程序。后端是JAVA/Spring应用程序,前端是Javascript/Angular开发,但我认为这不相关。 我的问题是来 self 前面的经过身份验证的 POST 请求被 azure XSRF 保护阻止,并且我找不到有关它的任何信息。需要明确的是,未经身份验证的请求以及经过身份验证的 GET 请求都可以顺利通过。但是,任何经过身份验证的 POST 都会生成类似于以下内容的日志:
2017-02-23T22:44:46 PID[2668] Verbose Received request: POST https://immosearchapi.azurewebsites.net/profile
2017-02-23T22:44:46 PID[2668] Verbose Found 'AppServiceAuthSession' cookie for site 'immosearchapi.azurewebsites.net'. Length: 556.
2017-02-23T22:44:46 PID[2668] Information Sending response: 403.60 Forbidden
2017-02-23T22:44:46 PID[2668] Warning Cross-site request forgery detected for user 'cont<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="78191b0c38190a11151902561b1715" rel="noreferrer noopener nofollow">[email protected]</a>' from referer 'immosearchweb.azurewebsites.net'!
我找到了这个回复: Azure website Rest Api only accept GET, POST returns 403. Possibly CORS
这实际上是一种可能的解决方法,因为更改 Use-Agent header 会有效禁用对此请求的 XSRF 保护。
但是...在 Chrome 上无法更改用户代理,这对我来说是 Not Acceptable 。
那么有没有办法完全禁用 Azure 后端的 XSRF(因为现阶段安全性并不是真正的问题)?
或者我在哪里可以找到有关接受请求的预期 cookie 和/或 header 的文档?
提前谢谢您...
更新: 这并不是我自己问题的真正答案,但作为更新,我解决此问题的方法是将项目架构更改为单服务器方法。我更新了 Spring 应用程序以服务前端和 Rest API,以避免 Azure 出现 CORS 和 XSRF 问题。我一直无法让 ADAL 工作,而且它似乎只支持 MS 帐户,无论如何,这对我来说不是一个解决方案。
最佳答案
您似乎已在 Azure WebApp 上为您的 Web 应用程序启用了身份验证/授权
功能。因此,如果您想进行跨站请求,有两种方法可能对您有所帮助。
- 针对您当前的场景使用
Adal.js
或Adal-Angular
,请按照ADAL for JS
的 README 内容进行操作更改您的代码。还有一个blog其中介绍了adal js库。 - 根据我的经验,您可以在
immosearchweb.azurewebsites.net
上创建一个类似的接口(interface)用于 Angular 请求调用,并使用 Java 中的 HttpClient 传递请求参数和正文以调用上的接口(interface)immosearchapi.azurewebsites.net
。看起来很简单。
关于java - 如何对 Azure Web 应用程序使用 XSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427760/