0

我编写了一个 Web 应用程序供内部使用(而不是更广泛的 Internet),它使用 Windows 身份验证 - ASP.NET 询问 Windows 以获取当前的凭据集。如果在我设置的 AD 组中找不到用户名,则从受保护页面的 Page_PreInit 调用的身份验证方法会引发 401 错误。

我从 Throwing an HttpException 实现 Earlz 的 CustomErrorsFixer总是发回 HTTP 500 错误?因为我也只得到了500s。现在我的自定义错误页面正在工作,这很棒。

在Visual Studio开发服务器本地开发,我发现如果我没有访问权限,我就直接进入401错误页面。然而!当我将站点发布到 IIS 服务器时,如果用户无权访问,他们会收到Windows 用户名/密码提示(XP 中丑陋的小提示)。这实际上非常方便,因为它让登录到不同域的人有机会输入正确的凭据。

在这个阶段,当密码提示出现时,如果用户点击CancelEscape,他们会转到自定义的 401 页面,该页面告诉他们如何去请求访问。但是,如果他们尝试输入用户名和密码,默认为错误的域,因此是不正确的凭据,他们会显示默认的 IIS 401 页面,我非常希望避免这种情况。第三种情况 - 如果他们输入正确的凭据,他们会被询问 3 次,然后显示自定义错误页面。

因此,如果用户通过“身份验证”,他们将看到自定义 401 页面,如果没有,则看到标准 IIS 页面。

但是,我发现大多数人在提示输入用户名/密码框时只输入没有域的用户名/密码 - 这最终是不正确的,因此将它们发送到非自定义 IIS 401 页面。有谁知道我该如何解决这个问题?这非常烦人,因为人们需要查看自定义 401 页面才能查看他们需要请求访问哪个组!

万一这很重要,我们都使用的浏览器是 XP 上的 IE8 或 Windows 7 上的 IE9。如果我应该发布任何代码,请告诉我。

4

1 回答 1

2

默认情况下,IIS7 会拦截 401 以及其他一些 HTTP 状态代码。

试试这个:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>
于 2012-05-25T22:54:31.877 回答