我们最近将API应用程序从Azure云服务迁移到Azure网站,并且一些客户端仍在使用我们的旧协议进行身份验证,该协议使用cookie(而不是通常的Authorization: BearerHTTP标头)。我们需要支持此身份验证协议一段时间,因为客户端将无法立即迁移。
Authorization: Bearer
为了在指向API的跨域ajax请求中支持cookie,客户端需要在XMLHttpRequest 中将withCredentials设置设置为true,服务器需要对Access-Control-Allow- Credentials标头以及任何CORS请求进行响应。
withCredentials
true
Access-Control-Allow- Credentials
我们面临的问题是,Azure网站完全自己管理CORS,并使用其自己的配置(仅限于允许的来源列表)进行响应,这不允许设置此标头…从而破坏了我们所有Ajax客户的应用程序!
有没有办法(在响应中)临时添加此标头?
我们终于设法了解了Azure Apps CORS中间件的行为。要禁用它,您必须清除Web应用程序的CORS刀片中的每个允许的原始条目(包括*)。然后,您可以使用Web Api 2功能或使用web.config自己管理CORS。
*
该信息甚至可以在文档中找到:
不要在一个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配置。