我被告知可以创build一个不需要login的Web应用程序。 用户login到Windows,通过Active Directory(LDAP)查找进行身份validation。 然后,他们应该能够去我的web应用程序,永远不会看到一个login提示。 这些客户一直把这称为单点login(可能不正确,也是我的一部分困惑)。
但是,从我读的Tomcat文档中的单点login是:
当您希望让用户能够login到与您的虚拟主机关联的任何一个Web应用程序 ,然后在同一个虚拟主机上识别所有其他Web应用程序的身份时,使用单点login阀。
这对我来说非常清楚。 用户必须login一次,才能访问tomcat实例上的每个webapp。 但是,我需要做的是以某种方式让他们login,而不向我的Tomcat服务器提供任何凭据。
所以,为了这个工作我想象:
我见过一些使用客户端证书的例子,尤其是DoD PKI系统,这对我来说很有意义,因为在这种情况下,你configurationTomcat来请求客户端证书 ,但是只要login到Windows,我就不会看到这个会工作,浏览器会传递给服务器的信息是什么?这是NTLM的用途?
首先 – 如果其他用户碰巧访问此页面 – 只有某些身份validation方法可以让您执行快速的SSO。 这些是NTLM和Kerberos 。 LDAP – 另一方面,永远不会给你提供即时的SSO。
NTLM实际上是NTLMv1和NTLMv2。 这是非常不同的,NTLMv1由于严重的安全问题而被弃用。 您应该避免使用Java身份validation解决scheme,因为它们只在文档中使用“NTLM”一词,因而无法正确识别它们是否支持NTLMv1或NTLMv2。 机会是说安全解决scheme的开发者不知道自己哪个更有理由去寻找逃生。
与传统观念相反,NTLMv1和NTLMv2都是由微软完全logging的,但是你仍然可以find声称拥有“反向工程”协议的解决scheme。 确实,这是微软在2006年或2007年左右logging我所相信的协议之前所需要的。无论如何,NTLMv1是一个禁忌。 NTLMv2本身没有任何问题,但是微软已经逐步淘汰了所有产品中的NTLM,以支持Kerberosauthentication。 NTLMv1已经很长时间了,NTLMv2现在只有在没有域控制器可用的情况下才被Microsoft使用。 底线:NTLM(任何forms)并不是真正的前进方向。 实际上,我们应该向微软致敬,在这里采取基于标准的方法。
这给你带来了Kerberos。 Microsoft已经创build了一个通过HTTP协商和传输身份validation信息的协议。 这在Microsoft产品中被称为“ 集成Windows身份validation ”,但是它已经被定名为SPNEGO的官方标准。 这是你应该寻找的。 SPNEGO支持NTLMv2和Kerberos作为底层的身份validation机制,但由于上述原因,您应该将目标locking为Kerberos而不是NTLMv2。
我已经使用SourceForge上的SPNEGO项目成功地将多个Tomcat应用程序(在Linux / Solaris上运行)与Active Directory集成在一起。 我发现这是最简单的方法。 这样就可以为您提供类似于Sharepoint服务器所做的类似SSO的快速SSO。 这很可能是您的用户在谈论“SSO”时期待的。 正确地获取Kerberosconfiguration,生成密钥并在Active Directory中设置“虚拟”帐户可能是一件麻烦事,但是一旦你把事情做好了,它就像魅力一样。
我不喜欢关于SourceForge的SPNEGO Project的唯一的事情是我不明白它执行authentication的频率。 我讨厌的怀疑是它为每个页面查看,而不是每个会话一次。 也许我错了。 无论如何:这突出了SSO解决scheme中需要考虑的另一件事:您不希望实施一种解决scheme,通过不必要的请求来“混淆”您的身份提供者(如Active Directory)。
在Windows Active Directory环境中,单点login用于表示访问内部网页,其中包含Windowslogin权限,Web服务器可以对其执行操作。 这是使用NTLM的东西,但更新的实现使用Kerberos代替。
如果你打开一个Sharepoint服务器网站,它知道你是谁,而不需要login用户名和密码,但是这只适用于同一networking上的内部网站,我认为它不适合在公共网站上工作。 (我不能说你的意思是“虚拟主机”,如在Apache虚拟主机或外包托pipe服务器)。
以下是描述Kerberos身份validation如何工作到运行IIS / ASP.Net的Web服务器的Microsoft文档: http : //msdn.microsoft.com/zh-cn/library/ff647076.aspx
它看起来可能与Apache / Tomcat / Java有关。 下面是一个描述英国大学实施的PDF文档: http : //gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf和一个Codeplex项目: http : //tomcatspnego.codeplex.com/和Openfire有一些通常在这里使用Java / Kerberos的文档( http://community.igniterealtime.org/docs/DOC-1060 )。
听起来就像您正在描述Microsoft所称的集成Windows身份validation。
它看起来像Tomcat支持Windows身份validation,基于这篇文章 。
对于初学者,你无法避免login。 如果你想识别用户,你必须让他们login。 忘掉NTLM吧,Kerberos就可以拯救 – 它可以以完全透明的方式完成任何事情。
SingleSignOnValve不是你正在寻找的。 如果你使用Tomcat 7,你可以马上使用SpnegoAuthenticator ,但是你必须使用这个 。