2016-04-26 71 views
6

我们最近将一个API应用程序从Azure云服务迁移到Azure网站,而且一些客户端仍在使用我们的传统协议进行身份验证,而不是通常的Authorization: Bearer HTTP标头)。我们需要长时间支持这种身份验证协议,因为客户端无法立即迁移。在Azure网站(Azure应用服务)中启用Access-Control-Allow-Credentials标头

为了支持饼干在引导到API的横原点AJAX请求时,客户端需要的withCredentials设置设为true在XMLHttpRequest的,并且服务器需要与Access-Control-Allow-Credentials头以及任何CORS请求repond。

我们面临的问题是,Azure网站本身管理CORS,并且使用自己的配置(限于允许的来源列表)来响应,该配置不允许设置此标头。 。因此打破了我们所有Ajax客户端的应用程序!

有没有办法(暂时)在响应中添加此头文件?

回答

11

我们终于明白了Azure的应用CORS中间件的行为。要禁用它,您必须清除Web应用程序CORS刀片中的每个允许的原始条目(包括*)。然后,您可以使用Web Api 2功能或使用web.config自行管理CORS。

的信息,甚至可以在the documentation

不要试图在一个API的应用程序同时使用的Web API CORS和应用服务CORS。应用服务CORS将优先,Web API CORS将不起作用。例如,如果您在App Service中启用一个原始域,并在您的Web API代码中启用所有原始域,则您的Azure API应用程序将只接受来自您在Azure中指定的域的调用。

所以最终的答案是:如果您的应用程序不需要特定的CORS管理,则可以使用Azure App Service CORS。否则,您需要自己处理它,并禁用Web应用程序中的所有CORS配置。

+0

谢谢!在Azure托管的ServiceStack应用程序中使用CORS时遇到了很多麻烦。事实证明,从Azure门户移除CORS配置可以解决所有问题。 –

+0

奇怪的是,它应该有一个切换来禁用Azure cors,只需删除所有网站即可禁用它并传递到您的应用。如果列出了任何来源,它似乎会删除您拥有的任何其他CORS标题(包括创建,方法等)。我认为进入一个网站的某种解释会使它成为可能,并且应该提供用于这些其他标题的值。我认为它应该给出一些类似的错误或警告自动删除您的标题太... –

1

这是您可以在web应用程序中提供的web.config文件中执行的操作。

您可以使用Visual Studio Online(Monaco)进行编辑,该工具是从Azure门户添加的工具。

在这里阅读更多:http://enable-cors.org/server_iis7.html

+0

我对这种方法持怀疑态度,因为我认为Azure网站CORS中间件覆盖了托管应用程序设置的所有CORS头文件来设置它自己的,但是我会尽可能地尝试并让您知道。 –

+0

这就是我认为的,在客户端和我们的应用服务器之间有一个Azure网站中间件,它只需删除服务器设置的所有CORS相关头并用它自己替换它们,因此添加一个自定义的'Access-Control-Allow- web.config文件中的Credentials'头不起作用。任何其他自定义标题都已正确添加,但CORS标题不是。 –