【问题标题】:Tomcat Integrated Windows Authentication across Multiple DomainsTomcat 跨多个域的集成 Windows 身份验证
【发布时间】:2013-08-02 22:57:50
【问题描述】:
我正在尝试创建一个单点登录系统,在该系统中,在未加入任何域的 DMZ 中的 Tomcat 服务器上运行的应用程序能够针对多个域进行身份验证,同时仍使用其 Windows 凭据自动记录用户.
关键要求:
- 必须支持多个域
- 如果用户位于受支持的域中,则不得提示用户输入凭据
- Web 服务器不能位于域中
- Web 服务器位于 DMZ 中
- 必须支持 Tomcat 6
这甚至可能吗?如果可以,是否有任何框架支持这样做?我查看了 JOSSO、Shibboleth 和 OpenAM,但似乎没有一个满足所有五个要求。
JCIFS NtlmHttpFilter 看起来正是我正在寻找的,不幸的是它已被弃用,不再推荐。
Visio 图表供参考。
【问题讨论】:
标签:
java
tomcat
active-directory
windows-authentication
【解决方案1】:
Jespa 可以做到这一点。如果域具有信任,则默认的 Jespa HttpSecurityFilter 将起作用。但是,您必须在防火墙上戳一个洞,以便 Jespa 与目标 DC 上的 TCP 端口 445 通信。您可能希望创建一个 DNS 记录文件(请参阅 Jespa 操作员手册)以绕过 DNS,并且仍然让 Jespa 使用多个域控制器。
如果域没有信任,您实际上仍然可以这样做。但是您必须编写一些代码来设置 cookie,然后查找几个 jespa.http.HttpSecurityService 实例之一(每个域一个)来调用 doFilter。这意味着您将编写一个小请求路由器来选择正确的域。如需更详细的说明,请咨询 IOPLEX 支持。
但是请注意,如果客户端实际上并未加入域,那么无论您使用什么软件或协议,理论上都无法实现真正的单点登录。您将不得不使用像 OpenID 或 CAS 这样的“辅助”或“双重登录”风格的协议,在这些协议中您会被重定向到某个登录页面。然后客户端可以进入参与该“SSO”方案的任意数量的站点,而无需再次提供凭据(至少在会话的剩余时间里)。
【解决方案2】:
没有办法绕过需要域访问权限的 Kerberos。 NTLM 是没有选择的,因为它是专有的,不希望找到完整的 OSS 实现。只有Jespa。