IIS和Windows身份validation不允许错误页面

我从前两天一直在尝试。 我没有得到什么问题。 我在网上search,但没有find任何解决scheme。 我尝试了IIS的所有设置,如“移动协商,禁用其他身份validation”,但不起作用。 所以这里是我的问题:我有一个Intranet Web应用程序在ASP.NET中使用用户名和密码存储在Active Directory中。 我的应用程序中有五个不同的页面。 所有的页面都与他们的web.config文件存储在一个单独的文件夹中。 这些web.config文件具有允许像这样查看该页面的用户的名称。

<authorization> <allow users="Domainname\username"/> </authorization> 

我想将那些不在上面列表中的用户redirect到其他错误页面,并给出相应的消息。 我用这个

 protected void Application_EndRequest(object sender, EventArgs e) { if (HttpContext.Current.Response.Status.StartsWith("401")) { HttpContext.Current.Response.ClearContent(); Response.Redirect("~/myerrorpage.aspx?myerrormsg=you are not allowed"); } } 

这是在本地主机,但是当我把我的应用程序在IIS中的所有授权用户(在列表中的人)也redirect到错误消息页面。

在IIS之外,它工作正常。 但是,我无法将未经授权的用户redirect到错误消息页面。 我也尝试使用IIS的错误页面设置,但我有同样的问题。

请给我build议我该怎么做才能纠正这个问题。 还有其他的方法吗?

我不确定这个问题是否属于你的具体情况,但一般来说,这个过程是:

  1. 浏览器尝试在第一个连接上连接匿名
  2. Web服务器说:“对不起,你不能这样做,错误401,这是用户可以validation的方式”
  3. 浏览器对authentication进行分类(例如向用户询问凭证)
  4. 浏览器发出第二个请求,包含validation标题信息

我的猜测是,在步骤(1)中,通过在用户有机会提供凭证之前捕获第一个401,就失败了。 您可以使用F12工具或使用像Fiddler这样的工具来validation。

如果您使用Windows身份validation,那么您应该牢记这一点 – 如果您在IIS中手动启用Windows身份validation,请不要在您的web.config中包含以下代码

 <authentication mode="Windows" /> 

如果你使用这个,会导致和我上面在我的问题中所说的一样的问题。