我正在尝试创建一个单点登录系统,其中在未加入任何域的 DMZ 中的 Tomcat 服务器上运行的应用程序能够针对多个域进行身份验证,同时仍使用其 Windows 凭据自动记录用户.
关键要求:
- 必须支持多个域
- 如果用户在受支持的域中,则不得提示他们输入凭据
- Web 服务器不能位于域中
- Web 服务器位于 DMZ 中
- 必须支持 Tomcat 6
这甚至可能吗?如果可以,是否有任何类型的框架支持这样做?我查看了 JOSSO、Shibboleth 和 OpenAM,但它们似乎都不满足所有五个要求。
JCIFS NtlmHttpFilter
看起来正是我要找的东西,不幸的是它已被弃用,不再推荐。
供引用的 Visio 图。
最佳答案
Jespa 可以做到这一点。如果域有信任,则默认的 Jespa HttpSecurityFilter 将起作用。不过,您必须在防火墙上戳一个洞,以便 Jespa 与目标 DC 上的 TCP 端口 445 通信。您可能希望创建一个 DNS 记录文件(请参阅 Jespa 运算符(operator)手册)以绕过 DNS 并仍然让 Jespa 使用多个域 Controller 。
如果域没有信任,您实际上仍然可以这样做。但是您必须编写一些代码来设置 cookie,然后查找几个 jespa.http.HttpSecurityService 实例之一(每个域一个)以调用 doFilter。这意味着您将编写一个小请求路由器来选择正确的域。如需更详细的解释,请咨询 IOPLEX 支持。
但是请注意,如果客户端实际上并未加入域,那么无论您使用什么软件或协议(protocol),理论上都不可能实现真正的单点登录。您将不得不使用“辅助”或“双重登录”样式的协议(protocol),例如 OpenID 或 CAS,您会在其中被重定向到某个登录页面一次。然后客户端可以进入参与该“SSO”方案的任意数量的站点,而无需再次提供凭据(无论如何至少在 session 的其余部分)。
关于java - 跨多个域的 Tomcat 集成 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18027333/