使用 Active Directory 的 SSO 如何让用户透明地登录到 Intranet Web 应用程序?

bla*_*k3r 47 active-directory authentication single-sign-on pki

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

但是,从我从 Tomcat 文档中读到的 Single Sign On 是:

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

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

所以,为了让它起作用,我想:

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

我见过一些使用客户端证书的例子......特别是 DoD PKI 系统,这对我来说很有意义,因为在这些情况下你配置 Tomcat 来请求客户端证书,但只是登录到 Windows 我不明白这是怎么回事将工作以及浏览器将传递给服务器的信息等。这是 NTLM 的用途吗?

uni*_*010 47

首先 - 以防其他用户碰巧访问此页面 - 只有某些身份验证方法允许您进行无提示 SSO。它们是NTLMKerberos。另一方面,LDAP 永远不会为您提供无提示的 SSO。

NTLM其实就是NTLMv1和NTLMv2。它们非常不同,NTLMv1 由于严重的安全问题而被弃用。您应该避免使用无法正确识别是否支持 NTLMv1 或 NTLMv2 的 Java 身份验证解决方案,因为它们仅在其文档中使用“NTLM”一词。很有可能上述安全解决方案的开发人员不知道自己,这更有可能是寻找防火梯的原因。

与传统观点相反,NTLMv1 和 NTLMv2 都由 Microsoft 完整记录,但您仍然会找到声称对协议进行“逆向工程”的解决方案。确实,在 Microsoft 记录我认为在 2006 年或 2007 年左右的协议之前需要这样做。无论如何,NTLMv1 是一个禁忌。NTLMv2 本身并没有什么问题,但微软一直在其所有产品中逐步淘汰 NTLM(以任何形式)以支持 Kerberos 身份验证。NTLMv1 早已不复存在,NTLMv2 现在仅在没有域控制器可用的情况下由 Microsoft 使用。底线:NTLM(以任何形式)并不是真正的前进方向。我们实际上应该向 Microsoft 致敬,因为它在这里采用了基于标准的方法。

这给您留下了 Kerberos。Microsoft 已经创建了一个协议,用于通过 HTTP 协商和传输身份验证信息。这在 Microsoft 产品中被称为“集成 Windows 身份验证”,但它已被确定为官方标准,名称为SPNEGO。这是你应该寻找的。SPNEGO 支持 NTLMv2 和 Kerberos 作为底层身份验证机制,但由于上述原因,您应该针对 Kerberos 而不是 NTLMv2。

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

我不喜欢SourceForgeSPNEGO 项目的唯一一件事是我不明白它执行身份验证的频率。我讨厌的怀疑是它为每个页面浏览而不是每个会话一次。也许我错了。无论如何:这突出了 SSO 解决方案中要考虑的另一件事:您不希望实施一个解决方案,该解决方案会向您的身份提供者(例如 Active Directory)发送不必要的请求。

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