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

关键要求:


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


这是否有可能,如果有的话,是否有某种框架可以做到这一点?我看过JOSSO,Shibboleth和OpenAM,但似乎没有一个满足所有五个要求。

JCIFS NtlmHttpFilter看起来与我要查找的内容完全一样,但是很遗憾,它已被弃用,不再推荐使用。



Visio图供参考。

最佳答案

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

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

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

关于java - 跨多个域的Tomcat集成Windows身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18027333/

10-11 07:27