30

我想让我的桌面 Java 应用程序具有与 Active Directory 用户相关的单点登录。分两步,我想:

  1. 确保特定用户已使用某些用户条目登录到 Windows。
  2. 从 Active Directory 中查看该用户的一些设置信息

使用Java:确定当前 Windows 用户的编程方式我可以获得当前 Windows 用户的名称,但我可以依赖它吗?我觉得

System.getProperty("user.name")

不够安全?(“user.name”似乎是从环境变量中获得的,所以我不能依赖它,我想?)

问题在 Linux 上使用 Java 对 Active Directory 进行 身份验证为我提供了给定名称+通行证的身份验证,但我想基于 Windows 登录进行身份验证?

对于 Active Directory 访问,LDAP 可能是选择吗?

4

6 回答 6

14

不支持。Java 6 有改进,但还不够。

Java 有自己的 GSS 堆栈。问题在于单点登录,您需要从操作系统(而不是 Java 堆栈)获取 Kerberos 票证。否则,用户必须进行第二次身份验证(违背单点登录的目的)。

查看http://java.sun.com/developer/technicalArticles/J2SE/security/。往下看“Access Native GSS-API”,它谈到了一个新的系统属性 sun.security.jgss.native,当它设置为 true 时,会导致 Java 使用底层的 OS GSS 实现,从而可以访问 OS 级别的身份验证。完美!....除了它仅支持 Solaris 和 Linux,不支持 Microsoft Windows。

然而,Java 6 似乎有足够的支持充当服务器,从 IE 接收 SPNEGO 身份验证请求,然后针对 Active Directory 对该用户进行身份验证。它只是仍然不完整的桌面客户端支持。

于 2009-10-06T02:11:31.903 回答
5

JAASLDAP LoginModule一起使用。这将允许您插入底层 Java 安全基础设施。

当您需要使应用程序脱机或“调试”应用程序时,您可以轻松地将 LDAP 模块换成虚拟模块。这允许您继续测试您的“安全性”,而不依赖于 Active Directory。高度可测试,解耦,并且您可以在稍后的时间验证方案,几乎没有任何悲伤。

于 2009-02-13T15:14:27.197 回答
4

Project Waffle具有在 Windows 上执行 SSO 的客户端和服务器端代码。它基于 JNA,不需要本地库。

于 2010-11-15T13:19:22.937 回答
0

在http://jcifs.samba.org/检查 jCifs

除此之外,坚持使用 LDAP(实际上,这应该是我的第一次尝试,但是......)

于 2009-02-13T12:01:54.040 回答
0

您是否考虑过使用 JNA api(允许您轻松地对操作系统进行本机调用)?

您可以在http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx上调用 win32 方法GetCurrentUserMSDN 文档。它位于 Advapi32.dll 中。

如果需要,它还有一个 unicode 版本,GetCurrentUserW。

你是对的。似乎可以更改环境变量,因此可能会误导使用。

我不确定跨平台对 32/64 位窗口的影响。如果您需要代码中的解决方案,我相信我可以为它写一些东西。

但是,是的,只是一个想法:)

于 2009-02-13T13:02:22.070 回答
0

使用Spring Security可能会获得最大的灵活性。您可以将它与 JAAS 和 LDAP 身份验证一起使用。

于 2009-02-13T15:24:45.330 回答