11

我正在做一个需要使用 Active Directory 进行单点登录的 Java EE Web 应用程序。

该应用程序将不再提示输入用户名和密码。身份验证过程需要检索当前 Windows 登录用户。拥有用户后,我需要查询 Active Directory 以获取该登录用户的角色。我知道这将排除非 Windows 用户,但这是一个内部应用程序,所有客户端都使用 Windows。

我必须在 2 个 Java EE Web 应用程序中实现 SSO。1 个应用程序在 GlassFish v2.1.1 (JDK 1.6) 上运行,另一个在 Tomcat (JDK 1.5) 上运行。

基本上我的主要问题是如何检索当前 Windows 登录用户。

我已经遇到过JAASKerberos。如果我错了,请纠正我。我的理解是这些是身份验证协议,它们没有检索当前登录用户的窗口的功能。

我已经尝试过以下方法,但我总是得到null或服务器自己的用户名。

  1. System.getProperty("user.name");
  2. new com.sun.security.auth.module.NTSystem().getName();
  3. request.getUserPrincipal().getName();
  4. System.getenv("USERNAME");
  5. Tomcat 中的 JCIF NTLM HTTP 身份验证
  6. 登录上下文

我愿意接受任何建议。

4

4 回答 4

4

华夫饼是一个很好的解决方案。它不需要 Kerberos 配置。

于 2011-04-29T11:14:08.017 回答
3

SPNEGO是一个开源项目,它提供了一个提供集成 Windows 身份验证的 servlet 过滤器。

如果您的组织使用基于 Java 的 Web/应用程序服务器,并且您更喜欢 Kerberos/SPNEGO 而不是 NTLM 作为身份验证协议,并且您更愿意使用基于 Java Servlet Filter (JSR-53) 的实现而不是容器特定的身份验证模块 (JSR -196),并且您想要 SSO(无用户名/密码提示),那么您可能会对这个项目感兴趣。

它具有配置TomcatGlassfish的说明。

于 2011-01-04T02:54:24.463 回答
0

不再支持JCIFS NTLM (尽管它将与 NTLMv1 一起使用)。在我当前的项目中,我们按照之前的建议使用了SPNEGO

选项 1、2 和 3 将尝试让您成为服务器用户 - 您可能需要考虑此代码在哪里运行以及它如何与客户端计算机交互(提示 - 它不能)

于 2011-01-04T13:30:54.370 回答
0

这可能会有所帮助: http : //webmoli.com/2009/08/29/single-sign-on-in-java-platform/ http://appliedcrypto.com/

于 2011-01-04T10:01:42.520 回答