我听说在Windows上你可以从网络浏览器登录到网络服务器,而无需通过常用的登录输入用户名和密码,而是使用NTLM协议直接使用Windows的凭据。

这是如何实现的? Web服务器是否需要支持一些额外的身份验证?

更新:我要求的是通用网络服务器,而不仅仅是IIS。例如,如何在Apache上执行此操作?

有帮助吗?

解决方案

只需将Web服务器配置为支持Windows身份验证(将是NTLM,或者 - 更好 - 如果客户端和服务器都是W2K或更高版本,则为Kerberos)。我相信IIS或Apache可以配置为这样做。

浏览器也必须支持这一点 - 至少IE会这样做(不确定其他人,可能)。 编辑:看起来像firefox也有一些支持,以及MacOS上的safari

编辑:有关apache的详细信息,请参阅用于NTLM身份验证的Google模块。 Kerberos模块也存在。根据其他答案,这实际上只适用于Intranet - 不仅仅是因为浏览器需要位于Intranet区域(仅适用于IE),而且因为任何干预防火墙通常会阻止此工作,并且因为必要的域间信任将可能不存在。如果apache服务器在UNIX上,那么工作也有点麻烦,尤其是如果你在UNIX上也有Kerberos服务器,但仍然可能。

其他提示

只有在特定情况下才会无缝;即网络服务器需要支持NTLM(例如,IIS),并且它需要位于客户端配置为信任的区域中(IE中的“Intranet区域”,除非最终用户调整了他们的设置)

如果您的网络服务器和客户端电脑位于由Active Directory或类似网站保护的网络上,您可以在网络服务器上的IIS中为自动登录所有IE客户端(允许)的网站设置“Windows集成安全性”。

如前所述,如果您的后端是Windows托管(MS Active Directory),则通常使用NTLM。但是,还有可用于Apache的模块,它们将与此相关: mod_ntlm

由于这是它自己的协议,因此需要浏览器能够理解该协议并回复身份验证挑战。我不知道哪些浏览器支持这个,但我的假设是大多数人都这样做。

根据我的经验,kerberos更像是一种优先选择的方法,但是我没有多少工作,所以不幸的是,我没有太多的建议。

另一方面,我记得在某处读到JRE还有办法在你的网络服务器上绑定NTLM,以获取经过身份验证的用户的身份信息。如前所述,.NET也支持这一点。

此外,Firefox默认不支持NTLM,但可以使用以下方式配置: http://www.crossedconnections.org/w/?p=89

如果将IIS设置设置为要求身份验证,则用户需要登录才能访问该页面。然后,如果他们以正常方式(从控制台)登录,他们对该服务器上的任何内容都拥有任何权限(如果不是接口)。

除此之外,我不确定你指的是什么。

是的,这是可能的。它通常用于用户所在的Intranet应用程序。 Windows使用 NTLM Kerberos 来授权用户使用中央服务,通常是Windows平台上的 Active Directory 。在.NET平台上,可以通过 System.Threading.Thread.CurrentPrincipal.Identity 实例访问当前用户信息。

后来我发现了一个非常相似的问题检索NTLM没有IIS的Rails的Active Directory用户数据也有很好的答案。

你可能也想看看Jespa。它似乎比Kerberos更直接,但提供了良好的ntlm sso功能。

我一直在寻找有关Kerberos的更多信息(因为NTLM,甚至v2,在AD 2008中已被弃用),我找到了这篇文章,解释了如何使它与Apache一起使用(如你所提到的)。 http://blog.scottlowe.org/2006/ 8月10日/基于Kerberos的-SSO与 - 阿帕奇/

这个问题可能已经过时(或者至少已经解决了),但如果它可以帮助某人......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top