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

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

我从前两天开始就一直在尝试这个方法。我不知道问题出在哪里。我在网上搜索过,但没有找到任何解决方案。我尝试了 IIS 的所有设置,例如“向下移动协商,禁用其他身份验证”,但不起作用。所以我的问题如下:我在 ASP.NET 中有一个内部网 Web 应用程序,它使用存储在 Active Directory 中的用户名和密码。我的应用程序中有五个不同的页面。所有页面都存储在单独的文件夹中,其中包含它们的 web.config 文件。这些 web.config 文件包含允许查看该页面的用户的名称,如下所示。

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

我想将不在上述列表中的用户重定向到其他错误页面并显示相应的消息。我用的是这个

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 时,所有授权用户(列表中的用户)也会重定向到错误消息页面。

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

请建议我该怎么做才能解决这个问题。还有其他方法吗?

答案1

我不确定这是否是您具体情况下的问题,但一般来说,流程是:

  1. 浏览器尝试连接匿名的首次连接时
  2. Web 服务器提示“抱歉,您无法执行此操作,错误 401,以下是用户可以验证身份的方式”
  3. 浏览器进行身份验证(例如要求用户提供凭证)
  4. 浏览器发出第二个请求,其中包含身份验证标头信息

我猜想您在第 (1) 步失败了,因为在用户有机会提供凭据之前捕获了第一个 401。您可以使用 F12 工具或 Fiddler 之类的工具来验证这一点。

答案2

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

<authentication mode="Windows" />

如果您使用它,它会导致与我上面问题中提到的相同的问题。

相关内容