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

标签 java tomcat active-directory windows-authentication

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

关键要求:

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

这甚至可能吗?如果可以,是否有任何类型的框架支持这样做?我查看了 JOSSO、Shibboleth 和 OpenAM,但它们似乎都不满足所有五个要求。

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


供引用的 Visio 图。 enter image description here

最佳答案

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/

相关文章:

java - 如何使用 java.util.Calendar 类在 jquery datepicker 上设置日期

java - 如何在传递它的原始方法中访问修改后的 StringBuilder

jsf - Spring 引导 + JSF。 View *.jsf 正常工作但 *.xhtml 不正常

.net - UserPrincipal.GetGroups失败,出现未知错误

java - 从代码更改布局的背景颜色

java - Request.getAttribute ("javax.servlet.request.X509Certificate") 返回 Null

tomcat - Websphere 在部署时会分解 WAR 和/或 JAR 吗?

c# - Active Directory,枚举用户组,COM 异常

java - 使用 JNDI 在 Active Directory 中创建自定义用户属性

Java:使用队列管理比线程更多的连接