我们最近将一个API应用程序从Azure云服务迁移到Azure网站,一些客户端仍在使用我们的旧协议进行身份验证,该协议使用cookie(而不是通常的授权:承载HTTP标头).我们需要支持此身份验证协议一段时间,因为客户端无法立即迁移.
为了支持针对API的跨源ajax请求中的cookie,客户端需要在XMLHttpRequest中将withCredentials设置为true,并且服务器需要使用Access-Control-Allow-Credentials头以及任何CORS进行响应请求.
我们面临的问题是Azure网站自行管理CORS,并使用自己的配置(仅限于允许的来源列表)进行响应,这不允许设置此标头…从而打破了申请我们所有的Ajax客户端!
有没有办法(临时)在响应中添加此标头?
我们终于设法了解Azure Apps CORS中间件的行为.要禁用它,您必须清除Web应用程序的CORS刀片中的每个允许的原始条目(包括*).然后,您可以自己管理CORS,使用Web Api 2功能或使用web.config.
该信息甚至可在the documentation中获得:
Don’t try to use both Web API CORS and App Service CORS in one API app. App Service CORS will take precedence and Web API CORS will have no effect. For example,if you enable one origin domain in App Service,and enable all origin domains in your Web API code,your Azure API app will only accept calls from the domain you specified in Azure.
因此,最终的答案是:如果您的应用程序不需要非常具体的CORS管理,则可以使用Azure App Service CORS.否则,您将需要自己处理它并禁用Web应用程序中的所有CORS配置.