Active Directory的SSO如何工作,从而使用户透明地登录到Intranet Web应用程序?


40

有人告诉我,可以制作不需要登录的Web应用程序。用户登录Windows,该Windows通过Active Directory(LDAP)查找进行身份验证。然后,他们应该能够访问我的webapp,并且永远不会看到登录提示。这些客户一直将此称为“单点登录”(可能不正确,这是我困惑的一部分)。

但是,从我从Tomcat文档中读取的“单点登录”是:

当您希望使用户能够登录到与您的虚拟主机关联的任何一个Web应用程序,然后让其在同一虚拟主机上的所有其他Web应用程序识别其身份时,可以使用Single Sign On Valve 。

这对我来说很清楚。用户只需登录一次即可访问tomcat实例上的每个Web应用程序。但是,我需要做的是以某种方式让他们登录,而无需向tomcat服务器提供任何凭据。

因此,为了使它起作用,我想:

  • 用户请求某些页面
  • 服务器看不到会话令牌,然后向客户端请求一些凭据。
  • 客户端浏览器无需用户干预即可向服务器提供一些凭据。
  • 然后,使用客户端浏览器提供的那些凭据在LDAP中进行查找。

我看过一些使用客户端证书的示例...尤其是DoD PKI系统,这对我来说很有意义,因为在这种情况下,您将Tomcat配置为请求客户端证书,但是仅登录Windows我看不到这将正常工作,浏览器将向服务器传递什么信息,等等。这是NTLM的用途吗?

Answers:


40

首先,并且在其他用户碰巧访问此页面的情况下,只有某些身份验证方法可让您执行无提示的SSO。它们是NTLMKerberos。另一方面,LDAP绝对不会给您带来迅速的SSO。

NTLM实际上是NTLMv1和NTLMv2。这些有很大的不同,由于严重的安全问题,不建议使用NTLMv1。您应该避开Java身份验证解决方案,因为它们在文档中仅使用单词“ NTLM”,因此无法正确识别它们是否支持NTLMv1或NTLMv2。所说安全解决方案的开发人员可能不了解自己,这就是寻找防火通道的更多原因。

与传统观念相反,Microsoft完全记录了NTLMv1和NTLMv2,但是您仍然可以找到声称已对协议进行“反向工程”的解决方案。的确,在Microsoft记录我相信在2006年或2007年左右发布的协议之前,这是必需的。无论如何,NTLMv1是不行的。NTLMv2本身没有什么问题,但是Microsoft一直在逐步淘汰其所有产品中的NTLM(以任何形式),以支持Kerberos身份验证。NTLMv1早已失效,现在只有在没有域控制器可用的情况下,Microsoft才使用NTLMv2。底线:NTLM(任何形式)并不是真正的前进之路。实际上,我们应该在这里向Microsoft致敬,他们采取了基于标准的方法。

这使您拥有Kerberos。Microsoft已创建用于通过HTTP协商和传输身份验证信息的协议。这在Microsoft产品中被称为“ 集成Windows身份验证 ”,但已被正式确定为SPNEGO的正式标准。这是您应该寻找的。SPNEGO支持NTLMv2和Kerberos作为基本身份验证机制,但是由于上述原因,您应该以Kerberos而不是NTLMv2为目标。

我已经使用SourceForgeSPNEGO Project成功地将几个Tomcat应用程序(在Linux / Solaris上运行)与Active Directory集成在一起。我发现这是最简单的方法。这为您提供了无提示的SSO,类似于Sharepoint服务器。这是您的用户在谈论“ SSO”时最可能期望的。正确配置Kerberos配置,生成密钥并在Active Directory中设置“虚拟”帐户可能会很麻烦,但是一旦正确配置,它就可以发挥作用。

我对SourceForgeSPNEGO Project唯一不满意的地方是,我不了解它执行身份验证的频率。我讨厌的怀疑是,它对每个页面视图都执行此操作,而不是对每个会话都执行一次。也许我错了。无论如何:这凸显了SSO解决方案中要考虑的另一件事:您不想实现一种解决方案,该解决方案会在不必要的请求下向身份提供者(例如Active Directory)发送垃圾邮件。


2
谢谢,使这个成为公认的答案。要添加到无提示登录列表中的一件事是x509证书登录...就像政府的CAC卡一样。
blak3r

即使已经6岁了,这也是一个了不起的答案!如果可以的话,我会投票给x10!
蒂姆·S。

2

在Windows Active Directory环境中,“单点登录”用于表示访问内部网页时会带有Windows登录权限,并且Web服务器可以对其执行操作。这是NTLM的用途,但是较新的实现使用Kerberos代替。

如果您打开Sharepoint Server网站,则无需登录用户名和密码即可知道您是谁,但这仅适用于同一网络上的内部网站,我认为在公共网站上运行它没有多大意义。(我无法确定您是在Apache vhost中还是在外包托管服务器中指“虚拟主机”)。

这是一份Microsoft文档,描述了Kerberos身份验证如何对运行IIS / ASP.Net的Web服务器起作用: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)。


0

听起来您在描述Microsoft所说的“集成Windows身份验证”。

根据本文,Tomcat似乎支持Windows身份验证。


-1

对于初学者,您无法避免登录。如果要标识用户,则必须让他们登录。忘了NTLM,Kerberos可以拯救您-它可以以完全透明的方式完成所有工作。

SingleSignOnValve不是您想要的。如果您使用的是Tomcat 7,则可以立即使用SpnegoAuthenticator,但在6上必须使用this


有点困惑...第一句话和第二句话似乎矛盾。使用Kerberos时,不会提示用户登录吗?
blak3r 2011年

1
不,他们没有。大图,多亏了Kerberos,用户手动输入了一次凭据,然后每次登录都会自动代表他进行。这并不意味着那时根本不会发生登录。这就是你写的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.