2017-02-23 49 views
1

我正在开发使用MS Azure的Web应用程序。后端是一个JAVA/Spring应用程序,前面是一个Javascript/Angular开发,但我不认为它是相关的。 我的问题是来自我前端的经过身份验证的POST请求被Azure XSRF保护阻止,并且我找不到任何有关它的信息。为了说清楚,未经身份验证的请求正在通过,没有问题,以及经过身份验证的GET请求。但是任何身份验证POST将产生类似日志:如何使用Azure Web应用程序的XSRF保护

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 '[email protected]' from referer 'immosearchweb.azurewebsites.net'! 

我发现这个答复: Azure website Rest Api only accept GET, POST returns 403. Possibly CORS

这实际上是一个可行的解决方法是改变使用代理有效头禁用此要求XSRF保护。

但是...更改用户代理是不可能在Chrome上,这在我的情况是不可接受的。

那么是否有一种方法可以完全禁用Azure后端的XSRF(因为安全性在这个阶段并不是真正的问题)?

或者我可以在哪里找到关于接受请求的预期cookie和/或标题的文档?

预先感谢您...

更新: 这是不是一个真正的答案我自己的问题,但作为一个更新,我对这个问题的解决方法已到项目架构更改为单服务器方法。我更新了我的Spring应用程序以服务于前端以及Rest API,以避免Azure出现CORS和XSRF问题。我从来没有能够使ADAL工作,它似乎只支持MS帐户,这对我来说不是一个解决方案。

回答

0

您似乎已经在Azure WebApp上为您的Web应用程序启用了Authentication/Authorization功能。所以如果你想做跨站请求,有两种方法可能对你有帮助。

  1. 使用Adal.jsAdal-Angular您目前的情况,请遵循ADAL for JS自述内容更改代码。还有一个blog,它为adal js库引入。
  2. 根据我的经验,您可以在immosearchweb.azurewebsites.net上为角度请求调用创建一个类似的接口,并通过请求参数&正文使用Java中的HttpClient调用immosearchapi.azurewebsites.net上的接口。这似乎很简单。
+0

认证显然是问题的根本原因。我设法为js工作获得ADAL,但我无法弄清楚如何向我的后端API发出经过验证的请求(Azure身份验证**真是令人迷惑)。所以基本上它不能解决我的问题,我仍然得到403响应。无论如何,您是否有关于选项2的任何信息?试图在没有ADAL的情况下生成经过身份验证的请求? –