【发布时间】:2012-07-19 21:36:21
【问题描述】:
我有一个带有 Windows 身份验证的 ASP.NET MVC3 应用程序部署到 IIS6。当经过身份验证的用户单击他们无权查看的链接时,会提示他们输入用户名和密码(在浏览器对话框中,而不是在页面中),如预期的那样。
但是,在单击取消或输入无效凭据 3 次后,我没有看到 401 Unauthorized 页面,而是看到一个空白页面。
查看 Fiddler,点击取消后有三个请求/响应。以下是响应摘要和标题:
-
ASP.NET 访问被拒绝消息 (401.2)
HTTP/1.1 401 未经授权 日期:格林威治标准时间 2012 年 7 月 20 日星期五 14:34:21 服务器:Microsoft-IIS/6.0 WWW-认证:协商 WWW-认证:NTLM X-Powered-By: ASP.NET X-AspNet-版本:4.0.30319 缓存控制:私有 内容类型:文本/html;字符集=utf-8 内容长度:1701 代理支持:基于会话的身份验证
-
IIS 您无权查看此页面 (401.1)
HTTP/1.1 401 未经授权 内容长度:1539 内容类型:文本/html 服务器:Microsoft-IIS/6.0 WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADgAAAAF...(为简洁起见,省略) X-Powered-By: ASP.NET 日期:格林威治标准时间 2012 年 7 月 20 日星期五 14:34:21 代理支持:基于会话的身份验证
-
空响应
HTTP/1.1 401 未经授权 日期:格林威治标准时间 2012 年 7 月 20 日星期五 14:34:21 服务器:Microsoft-IIS/6.0 WWW-认证:协商 WWW-认证:NTLM X-Powered-By: ASP.NET X-AspNet-版本:4.0.30319 X-AspNetMvc-版本:3.0 缓存控制:私有 内容长度:0 代理支持:基于会话的身份验证
如何让它显示 401 错误页面?
更新 1:
这是我的 web.config 错误部分。
<customErrors mode="RemoteOnly" defaultRedirect="~/Error" />
我也在使用HandleErrorAttribute。
我怀疑 IIS 返回的是空白页而不是 ASP.NET,但我不确定如何证明这一点。
更新 2:
这很有趣。如果我刷新空白页,我会看到 ASP.NET Access is Denied 消息。
【问题讨论】:
-
只是一个猜测,但它是否试图将它们重定向回用户名和密码页面,因为它们仍未获得授权?既然它已经认为它处理了用户,那么视图就没有什么可显示的了吗?
-
这不是登录页面,它是浏览器登录对话框。
-
啊抱歉没看到那部分。第三次尝试后,您是否将它们重定向到 401 页面?如果不是,那么您将保持在同一页面上,但您不会显示任何内容,因为服务器不发送任何内容。
-
@AndrewHagner 授权失败后如何重定向它们?
-
好吧,对于我完成的任何项目,我们都使用自定义的“拒绝访问”页面,然后直接执行标准 mvc。如果您真的反对这样做,那么您将不得不找到一种方法来重定向到 401 页面本身,我什至不确定您是否可以这样做,因为该页面在实际发生错误之前不会被托管。也许尝试重定向到同一页面,您曾提到,如果您刷新它,那么它会将您发送到那里,所以也许这会起作用。