繁体   English   中英

ASP.NET Windows身份验证自定义401未经授权的错误页面

[英]ASP.NET WindowsAuthentication custom 401 Unauthorized error page

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

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

我想要的不是提示他登录\\密码 - 只显示自定义错误页面。 听起来很简单 - 经过身份验证的用户获取所请求的页面,未经过身份验证的用户将重定向到自定义错误页面。 它适用于FormsAuthentication。

但是,我现在已经尝试了很多方法。 任何Web.config重定向都无法正常工作。 即使我清除了一个Response并放置了一个重定向 - 我将得到一个循环,因为这个自定义页面(例如, /Error/AccessDenied )也需要身份验证。 将控制器标记为AllowAnonymous不会执行任何操作。

但是,如果我在IIS管理器中启用匿名身份验证,则真正经过身份验证的域用户在打开网站时不会获得授权。

我怎么解决这个问题?

感谢@Abhitalks在评论中解释它的工作原理。 我不知道为什么,但我确信IE和谷歌Chrome在第一次请求时发送授权标题,这就是为什么,只有未经授权的用户才能获得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 OK。

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

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

耶尔达评论的重要补充:

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

<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

覆盖Authorize属性中的HandleUnauthorizedRequest方法。

例如:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
   filterContext.Result = new RedirectToRouteResult(
                            new RouteValueDictionary (new {controller = "CustomError", action = "Unauthorized"}));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM