匿名之前的IIS Windows身份验证

时间:2010-01-15 00:18:09

标签: windows iis forms-authentication windows-authentication

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:11)

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

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

当用户访问没有任何一种身份验证的页面时,您会吐出一个页面,其中包含基于cookie的身份验证的登录表单,以及指向仅允许身份验证访问的一个URL的链接。用户可以填写表单以获取cookie和表格身份验证,或者点击链接以使用HTTP身份验证登录。

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

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

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