跨多个域的Tomcat集成Windows身份验证

时间:2013-08-02 22:57:51

标签: java tomcat active-directory windows-integrated-auth

我正在尝试在系统上创建单一登录,其中在未连接到任何域的DMZ中的Tomcat服务器上运行的应用程序能够针对多个域进行身份验证,同时仍使用其Windows凭据自动记录用户

关键要求:

  • 必须支持多个域
  • 如果用户位于受支持的域中,则不得提示用户输入凭据
  • 网络服务器不能在域
  • Web服务器位于DMZ
  • 必须支持Tomcat 6

这是否可能,如果有的话,是否有任何支持这样做的框架?我看过JOSSO,Shibboleth和OpenAM,但似乎没有一个满足所有五个要求。

JCIFS NtlmHttpFilter看起来正是我想要的,不幸的是它已被弃用,不再推荐。


Visio图供参考。 enter image description here

2 个答案:

答案 0 :(得分:1)

Jespa可以做到这一点。如果域具有信任,则默认的Jespa HttpSecurityFilter将起作用。您必须在防火墙中戳一个洞,让Jespa与目标DC上的TCP端口445通信。你可能想要创建一个DNS记录文件(参见Jespa操作员手册)来绕过DNS并且仍然让Jespa使用多个域控制器。

如果域名没有信任,您实际上仍然可以这样做。但您必须编写一些代码来设置cookie,然后查找几个jespa.http.HttpSecurityService实例(每个域一个)中的一个以调用doFilter。这意味着你会写一个小的请求路由器来选择正确的域。有关更详细的说明,请咨询IOPLEX支持。

但是请注意,如果客户端实际上没有加入域,那么无论您使用什么软件或协议,理论上都不可能实现真正的单点登录。您必须使用“辅助”或“双重登录”样式协议(如OpenID或CAS),您可以将其重定向到某个登录页面一次。然后,客户端可以进入任何数量的参与该“SSO”方案的站点,而无需再次提供凭证(至少在会话的剩余时间内)。

答案 1 :(得分:0)

无法绕过需要域访问权限的Kerberos。 NTLM是没有选择的,因为它是专有的,并且不期望找到完整的OSS实现。只有Jespa