在Azure网站中启用Access-Control-Allow-Credentials标头(Azure App Services)

时间:2016-04-26 09:12:47

标签: ajax azure cors azure-web-sites

我们最近将一个API应用程序从Azure云服务迁移到Azure网站,一些客户端仍在使用我们的旧协议进行身份验证,该协议使用cookie(而不是通常的Authorization: Bearer HTTP标头)。我们需要支持此身份验证协议一段时间,因为客户端无法立即迁移。

为了支持针对API的跨源ajax请求中的cookie,客户端需要在XMLHttpRequest中将withCredentials设置为true,并且服务器需要使用{{ 1}}标题以及任何CORS请求。

我们面临的问题是Azure网站自行管理CORS,并使用自己的配置(限于允许的来源列表)进行响应,这不允许设置此标头...从而破坏了我们所有Ajax客户端的应用程序!

有没有办法(临时)在回复中添加此标题?

3 个答案:

答案 0 :(得分:17)

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

这些信息甚至可以在the documentation中找到:

  

请勿尝试在一个API应用中同时使用Web API CORS和App Service CORS。 App Service CORS优先,Web API CORS不起作用。例如,如果在App Service中启用一个源域,并在Web API代码中启用所有源域,则Azure API应用程序将仅接受来自您在Azure中指定的域的调用。

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

答案 1 :(得分:1)

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

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

在此处阅读更多内容:http://enable-cors.org/server_iis7.html

答案 2 :(得分:1)

Azure App Service CORS功能现在支持此功能。 不幸的是,目前还没有UX,因此启用它会有些痛苦。目前有两种简单的方法。

  1. 在Azure门户上,导航到您的Web应用。导航对API> CORS。现在有一个Enable Access-Control-Allow-Credentials的复选框。选中此框,然后按Save

  2. 通过以下命令使用Azure CLI:

az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.cors.supportCredentials=true --api-version 2015-06-01

您可以查看更多文档here

注意:这不适用于*作为允许的来源。这是我们决定做出的安全选择。