ASP.NET WindowsAuthentication自定义401未经授权的错误页面

我有一个使用ActiveDirectory进行身份验证的ASP.NET网站。

现在 ,当经过身份验证的用户打开一个页面时,他会自动进行身份验证。 我遇到了一个问题 - 当未经身份验证的用户(例如,未定义network.automatic-ntlm-auth.trusted-uris属性的Mozilla Firefox用户)打开一个页面时,IIS会发送401响应并提示登录密码。

我想要的不是提示他输入登录名密码 - 只显示一个自定义错误页面。 这听起来很简单 - 通过身份验证的用户可以获得所请求的页面,未经身份验证的用户可以重定向到自定义错误页面。 它对于FormsAuthentication来说工作得很好。

不过,我现在已经尝试了很多方法。 任何Web.config重定向都不起作用。 即使我清除一个Response并在那里重定向 - 我会得到一个循环,因为这个自定义页面(*例如/Error/AccessDenied )也需要认证。 将控制器标记为AllowAnonymous不会执行任何操作。

但是,如果我在IIS管理器中启用了匿名身份验证,则当真实身份验证的域用户在打开网站时没有被授权。

我怎么解决这个问题?


感谢@Abhitalks解释如何在评论中发挥作用。 我不知道为什么,但我确定IE和谷歌浏览器在第一次请求时发送授权标头,这就是为什么只有未经授权的用户才能得到401响应。 在理解了我无法避免401响应后,我决定使用这种简单的方法,因为这种行为是最接近理想的。

我在Global.asax添加了以下方法:

protected void Application_EndRequest(object sender, EventArgs e)
{
    if (Response.StatusCode == 401)
    {
        Response.ClearContent();
        Response.WriteFile("~/Static/NotAuthorized.html");
        Response.ContentType = "text/html";
    }
}

现在,当用户打开一个页面时,服务器返回一个自定义错误页面,但带有401 Unauthorized头。

Chrome,IE或配置良好的Firefox 。 用户请求URL,服务器返回带有401头的错误页面 - 浏览器自动完成授权挑战,重定向到相同的URL,服务器现在返回正确的页面和200。 用户不会看到这个错误页面。

未配置的Firefox 。 用户请求一个URL,服务器返回带有401头的错误页面 - 浏览器无法完成授权质询并提示用户输入凭据。

  • 用户输入正确的登录 。 用户再次请求相同的URL,获取一个页面并确定200。

  • 用户输入错误的登录名 浏览器会再次提示输入凭据。

  • 用户按取消 。 浏览器显示已经与标题401一起发送的自定义错误页面。该页面告诉用户如果他使用的是Firefox,那么他应该输入他的凭证或允许自动NTLM身份验证。


  • Yeldar评论的重要补充:

    当更改远程请求的响应消息(读取:非本地主机)时,您需要将以下内容添加到您的配置文件中:

    <system.webServer>
        <httpErrors existingResponse="PassThrough"></httpErrors>
    </system.webServer>
    

    如果您不允许响应“通过”,则远程客户端将获得默认的"You do not have permission to view this directory or page"

    我从以下地址获取了此信息:https://stackoverflow.com/a/17324195/3310441

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

    上一篇: ASP.NET WindowsAuthentication custom 401 Unauthorized error page

    下一篇: Throw error of 401 Unauthorized so Web.config shows appropriate page