用于Java Web应用程序SSO

时间:2018-03-07 18:38:53

标签: java ldap kerberos spnego windows-integrated-auth

背景:我目前有一个java Web应用程序,它在我的Mac上的localhost上运行。用户可以登录Web应用程序,并根据OpenLDAP服务器验证其凭据,该服务器也在本地计算机上的某个端口上运行(特别是使用this docker image)。 Web应用程序包括与LDAP服务器交互以提供登录用户名和密码的代码。验证成功后,用户将登录并可继续使用该应用程序的功能。

问题:此Web应用程序将部署到将使用Windows的客户端。他们正在申请SSO能力 - 即。成功登录其域下的Windows机器会绕过在运行Web应用程序时登录Web应用程序的需要。客户端无法在其计算机上运行其他Java应用程序,这将有助于SSO - 只需登录到他们的Windows机器就可以绕过登录Web应用程序的需要,这意味着需要以某种方式配置Windows,以及Web应用程序需要以某种方式为SSO配置。出于测试目的,我使用的是Windows 7虚拟机,它运行在我运行的同一台机器上并测试Web应用程序。

我已经完成了对SPNEGO,Java GSS API(看起来需要客户端代码与服务器通信),Kerberos,Windows IIS等的研究。我知道如何在Windows中启用Windows集成身份验证,但我不知道#39;知道如何在我的Web应用程序中实际使用它来启用SSO。基本上,在这种情况下,我仍然在如何在特定情况下实施SSO功能。以下是一些具体问题:

  1. 是否可以将浏览器配置为将运行它们的计算机的加密Windows凭据发送到Web应用程序,然后由Web应用程序对其进行解密并针对LDAP进行身份验证?如果是这样,这是如何工作的?
  2. 是否可以将Windows登录凭据配置为指向验证它们的LDAP服务器?
  3. 总体而言,如何将单点登录集成到在Windows计算机上运行的Web应用程序,其中Web应用程序配置为通过LDAP服务器对凭据进行身份验证?

1 个答案:

答案 0 :(得分:4)

Windows SSO基于Kerberos,而不是LDAP。人们通常混淆它们的原因是Microsoft Active Directory充当LDAP服务器和Kerberos服务器。

如果您的Windows用户需要透明身份验证(SSO),则必须实施Kerberos身份验证。

他们如何为Web应用程序实现Kerberos称为SPNEGO。

您需要执行以下操作:

  1. 在服务器的Active Directory中创建服务帐户,例如REALM \ svc_server
  2. 为您的服务器创建一个SPN,它将服务器的域名绑定到此服务器帐户。如果您的服务器在https://server.acme.com上运行,那么它应该是HTTP / server.acme.com
  3. 如果Windows用户登录到域REALM并转到https://server.acme.com浏览器将查找基于名称HTTP / server.acme.com的SPN,请从Active Directory请求Kerberos票证并将其发送到授权服务器根据SPNEGO规范标题
  4. 现在您只需使用内置Java Kerberos API或使用某些第三方库(kerb4jspring-security-kerberos,e.t.c验证此票证。)
  5. 正如您所见,LDAP不参与此身份验证流程(尽管可以将其用作下一步的授权)