我有一个使用ActiveDirectory进行身份验证的ASP.NET网站。ASP.NET WindowsAuthentication自定义401未经授权的错误页面
现在,当通过身份验证的用户打开一个页面时,他会自动进行身份验证。我遇到了一个问题 - 当未经身份验证的用户(例如,未定义为network.automatic-ntlm-auth.trusted-uris
属性的Mozilla Firefox用户)打开页面时,IIS将发送401响应并提示输入登录名\密码。
我想要的是不要提示他输入登录名\密码 - 只显示一个自定义错误页面。这听起来很简单 - 通过身份验证的用户可以获得所请求的页面,未经身份验证的用户可以重定向到自定义错误页面。它对于FormsAuthentication来说工作得很好。
但是,现在我已经尝试了很多方法。任何Web.config重定向都不起作用。即使我清除了一个Response
并放置了一个重定向 - 我将得到一个循环,因为此自定义页面(*例如,/Error/AccessDenied
)也需要身份验证。标记控制器为AllowAnonymous
什么也不做。
但是,如果我在IIS管理器中启用了匿名身份验证,则当真实身份验证的域用户在打开网站时没有被授权。
我该如何解决这个问题?
你想非IE用户重定向到另一个页面?基于用户代理的URL重写是一条路。 –
不可能。首先来自浏览器的请求始终是匿名的。 IIS总是通过'www.authenticate:negotiate'(或NTLM或两者)头以'401 Unauthorized'响应。然后客户端(浏览器)再次使用'Authorization:Negotiate ..hash..'头部来请求这次。根据可信站点,浏览器***将***总是要求凭证。无法显示自定义错误,因为第一个响应始终为“401”。 – Abhitalks
你可以编写一个HTTP模块并钩上HttpApplication.PostAuthenticateRequest。从那里你可以使用HttpContext.RewritePath和/或以你想要的方式使用响应上下文。很难说没有明确的repro案例。 –