2010-01-15 168 views
9

我有一个网站,我希望允许Forms和Windows身份验证。我的问题是,当您设置IIS以允许匿名(需要表单身份验证)和Windows验证浏览器不会发送用户的网络凭据时,似乎是这样。匿名前的IIS Windows身份验证

它只是使用匿名登录。有没有什么办法在IE8或IIS中尝试Windows Auth 1st,然后回退到匿名?

感谢您的任何帮助。

+0

可能的重复[如何支持NTLM身份验证回退形式在ASP.NET MVC?](http://stackoverflow.com/questions/4027911/how-to-support-ntlm-authentication-with-回到形式在asp-net-mvc) – Neil 2014-01-15 17:32:56

回答

11

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

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

当用户访问没有任何一种身份验证的页面时,您会使用基于cookie的身份验证的登录表单来提取页面,并且还会链接到仅允许验证访问的一个URL。用户可以填写表单以获得cookies &表单auth,或点击链接以使用HTTP auth登录。

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

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

但是,有几个浏览器不会自动提交更多页面的凭据,并且需要每个HTTP请求都先用401来响应,然后再用凭证发送请求。这使得可选的认证和混合认证方案变得不可能(以及让受保护网站的浏览速度慢得多!)。唯一现代的浏览器就是Safari。您可能并不在乎,因为Safari对集成Windows身份验证的支持传统上始终不稳定,并且仍然可以使用表单+ Cookie身份验证类型。

+0

嗯,对于downvote对不起,不知道为什么,但不能明显撤消.. – Onkelborg 2013-03-24 21:10:06