如何使用Windows登录进行单点登录并为桌面Java应用程序进行Active Directory条目?

30

我希望我的桌面Java应用程序能够与Active Directory用户相关的单点登录。我有两个要求:

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

使用Java: Programatic Way to Determine Current Windows User,我可以获取当前Windows用户的名称,但我可以依赖它吗?我认为

System.getProperty("user.name")

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

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

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

6个回答

14

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

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

请参阅http://java.sun.com/developer/technicalArticles/J2SE/security/。向下查看“访问本机GSS-API”,它谈到了一个新的系统属性sun.security.jgss.native,当设置为true时,Java将使用底层操作系统GSS实现,从而提供对操作系统级身份验证的访问。完美!...除了它仅受Solaris和Linux支持,而不是Microsoft Windows。

然而,Java 6似乎已经具备足够的支持,可以作为服务器接收IE的SPNEGO身份验证请求,然后针对Active Directory对该用户进行身份验证。只是桌面客户端的支持仍然不完整。


其他JVM是否提供如上所述的访问Kerberos票证的功能? - Thorbjørn Ravn Andersen
1
似乎Java 8有这种支持。https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/jgss-features.html - Ramiro

5
使用 JAASLDAP LoginModule。这将允许您插入底层的Java安全基础结构。
当您需要将应用程序脱机或“调试”应用程序时,您可以轻松地将LDAP模块替换为虚拟模块。这使您能够继续测试您的“安全性”,而不依赖于Active Directory。高度可测试、解耦,并且您可以在以后的时间更改认证方案,几乎没有任何麻烦。

谢谢,它支持Windows登录认证吗?(这样当用户登录Windows时,他/她不必单独为Java应用程序输入用户名和密码)起初我没有找到,还得继续寻找。 - Touko
嗯,我见过的唯一能做到这一点的模块都是属于像WebLogic这样的大型框架的一部分...或者是为了让Java客户端向Web服务器传递凭据而设计的。你可能需要编写一个小的JAAS提供程序,使用本地调用来可靠地完成这个任务。 - James Schek
2
不使用LDAP LoginModule,而是使用Krb5LoginModule似乎能够在使用参数useTicketCache时使用操作系统票据缓存(在Windows登录时获取的凭据)。仍然存在一些问题,但目前可以使用。 - Touko

4

项目 Waffle 包含客户端和服务器端代码,可在Windows上进行单点登录。它基于JNA,不需要本地库。


0

请访问 http://jcifs.samba.org/ 以了解 jCifs 相关信息。

除此之外,建议使用 LDAP(事实上它应该是我的首选,但是...)


0

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

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

如果需要,还有一个Unicode版本的GetCurrentUserW

而且您是正确的。似乎环境变量可以更改,所以使用它可能会产生误导。

我不确定在32/64位Windows上的跨平台影响。

如果您需要代码解决方案,我相信我可以为此编写一些内容。

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


0

在编程方面,您可能会发现 Spring Security 最具灵活性。它可用于 JAAS 和 LDAP 验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接