在启用Windows身份验证的情况下,IIS响应IIS中的CORS请求

我想在我的WebAPI项目中启用CORS支持,如果我启用匿名身份验证,那么一切正常,但使用Windows身份验证+禁用匿名身份验证,发送OPTIONS请求总是返回401未经授权的响应。 请求它的网站在DOMAIN上,因此应该可以拨打电话,有没有办法在不禁用Windows身份验证的情况下解决问题?


您只能允许匿名用户使用OPTIONS动词。

<system.web>
  <authentication mode="Windows" />
    <authorization>
      <allow verbs="OPTIONS" users="*"/>
      <deny users="?" />
  </authorization>
</system.web>

根据W3C规范,浏览器从CORS预检中排除用户凭证:https://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#preflight-request


几年后,但通过@dariusriggins和@ lex-li的回答,我设法将下面的代码添加到我的Global.asax中:

    public void Application_BeginRequest(object sender, EventArgs e)
    {
        string httpOrigin = Request.Params["HTTP_ORIGIN"];
        if (httpOrigin == null) httpOrigin = "*";
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", httpOrigin);
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Token");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");

        if (Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.StatusCode = 200;
            var httpApplication = sender as HttpApplication;
            httpApplication.CompleteRequest();
        }
    }

httpOrigin实际上在允许的主机列表中查找,但这只是复杂的事情。 这意味着所有其他请求都被验证,但选项只是返回。

感谢这个问题,如果没有它,我会失去的!


来自MS:

如果您禁用匿名身份验证,则IIS的设计将返回401到任何请求。 如果他们启用了Windows身份验证,那么在这种情况下,401响应将具有WWW-Authenticate头,以允许客户端启动身份验证握手。 问题就出现在客户正在使用的客户端是否可以执行Windows身份验证。

最后,似乎可能存在一个潜在问题,即是否可以配置URL,以便对一个动词(本例中为OPTIONS)允许匿名访问,但需要对其他动词进行Windows身份验证。 IIS不支持通过简单的配置。 通过启用匿名和Windows身份验证,在拒绝访问匿名用户的内容上设置ACL,然后配置有问题的URL的处理程序映射,以便它不验证是否存在与该URL关联的文件。 但这需要一些玩家来证实这一点。

链接地址: http://www.djcxy.com/p/77391.html

上一篇: 401 response for CORS request in IIS with Windows Auth enabled

下一篇: balancing PostgreSQL queries using two different Spring datasources