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

我希望我的桌面Java应用程序具有与Active Directory用户相关的单点登录。在两个步骤中,我想:

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

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

System.getProperty("user.name")

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

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

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


答案 1

它不受支持。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对该用户进行身份验证。它只是桌面客户端支持仍然不完整。


答案 2

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

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


推荐