匿名之前的 IIS Windows 身份验证

Posted

技术标签:

【中文标题】匿名之前的 IIS Windows 身份验证【英文标题】:IIS Windows Authentication before Anonymous 【发布时间】:2010-01-15 00:18:08 【问题描述】:

我有一个网站,我想同时允许表单和 Windows 身份验证。我的问题是,当您将 IIS 设置为允许匿名(表单身份验证所需)和 Windows 身份验证时,浏览器似乎不会发送用户的网络凭据。

它只是使用匿名登录。在 IE8 或 IIS 中是否有任何方法让它尝试 Windows Auth 1st 然后回退到匿名?

感谢您的帮助。

【问题讨论】:

How to support NTLM authentication with fall-back to form in ASP.NET MVC? 的可能重复项 【参考方案1】:

在还没有凭据的情况下,您不能在不弹出身份验证对话框的情况下要求 HTTP 身份验证(无论是基本身份验证还是集成 Windows 身份验证)。

因此,一般来说,对于混合 HTTP-auth+cookie-auth 方法,您可以为大部分站点启用匿名和经过身份验证的访问,但只允许对一个特定脚本进行经过身份验证的访问。

当用户访问一个没有任何一种身份验证的页面时,您会输出一个带有基于 cookie 身份验证的登录表单的页面,以及一个指向仅允许经过身份验证访问的 URL 的链接。用户可以填写cookies&forms auth的表单,或者点击链接使用HTTP auth登录。

如果用户点击该链接,他们将收到401 响应,并且必须通过身份验证对话框或可能自动使用集成的 Windows 身份验证提供 HTTP 身份验证。一旦这种情况发生一次,浏览器将开始向以后的每个页面提交相同的凭据,因此 IIS 将对凭据进行解码,以便在您的主站点脚本运行时为您提供预期的REMOTE_USER

浏览器只会将凭据提交到与401 脚本位于同一目录的页面或其子目录中。因此,最好将 HTTP-auth-required 脚本放在根目录中,例如 /login.aspx

但是,有一些浏览器不会自动提交更多页面的凭据,并要求每个 HTTP 请求首先响应 401,然后再使用凭据再次发送请求。这使得 optional-auth 和 hybrid-auth 方案变得不可能(以及使受保护站点的浏览速度更慢!)。唯一能做到这一点的现代浏览器是 Safari。您可能不在乎,因为 Safari 对集成 Windows 身份验证的支持一直以来都不稳定,它仍然可以使用 forms+cookies 身份验证类型。

【讨论】:

以上是关于匿名之前的 IIS Windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

IIS 混合匿名和 Windows 身份验证

IIS 身份验证

使用 Powershell 3.0 切换 IIS 7.5 身份验证“匿名身份验证”?

我在服务器上的iis上的身份验证选项中去掉了匿名访问,启用了集成windows身份验证

ASP.NET Windows 身份验证仅提示一个用户的凭据

WCF - Windows 身份验证 - 安全设置需要匿名