在启用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