java - 如何对 Azure Web 应用程序使用 XSRF 保护

标签 java angularjs azure csrf

我正在使用 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 应用程序启用了身份验证/授权功能。因此,如果您想进行跨站请求,有两种方法可能对您有所帮助。

  1. 针对您当前的场景使用 Adal.jsAdal-Angular,请按照 ADAL for JS 的 README 内容进行操作更改您的代码。还有一个blog其中介绍了adal js库。
  2. 根据我的经验,您可以在 immosearchweb.azurewebsites.net 上创建一个类似的接口(interface)用于 Angular 请求调用,并使用 Java 中的 HttpClient 传递请求参数和正文以调用 上的接口(interface)immosearchapi.azurewebsites.net。看起来很简单。

关于java - 如何对 Azure Web 应用程序使用 XSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427760/

相关文章:

java - 如何检查字符串中的每个字母

javascript - 从 JSON API 响应获取属性的唯一值计数

sql-server - 如何使用 SQL Server 在 azure 存储 blob 中创建文件

c# - 从 azure 函数调用 Web api 的最佳方法

java - Android 上的 Phonegap : Why does triggering the backbutton cause a SocketException?

java - 如何从 double 中删除科学记数法以获得最长的 double 值

java - 原始类型在 Java 中如何工作?

javascript - 如何将数组转换为数组中的对象 - Angular 和 Javascript

javascript - 如何将任何数组从 ng-repeat 传递到 AngularJs 属性指令?

azure - 无法使用 Azure Synapse 的数据流从 ADLS(csv) 转换并加载到专用 SQL 池