1

目前,我使用用户名和密码作为 ldap 的连接凭据(为了验证 AD 的用户)。

对于此处的身份验证,我使用 InitialDirContext 创建了一个初始上下文(用于 Active Directory),我们在其中提供了一组环境属性,其中包含身份验证信息。

我的代码如下所示:

env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ...);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, ...);
env.put(Context.SECURITY_CREDENTIALS, ...);
env.put("com.sun.jndi.ldap.connect.timeout", ...);

try {
  ctx = new InitialLdapContext(env);
}
catch (NamingException e) {
    System.out.println("error")
}

我想更改此代码,因此它将使用 NTLM 验证输入的用户名和密码作为针对 LDAP 的凭据。

你能给我举个例子吗?

NTLM – 是一套 Microsoft 安全协议,提供 - 身份验证 - 完整性 - 机密性

4

2 回答 2

0

忘了它。Java 中没有对 NTLM 的 SASL 支持。使用 GSS-API。总是弃权使用专有技术,这是一条死胡同。并且永远不要使用simple身份验证,它以明文形式传输密码。至少使用 Digest MD5。

于 2012-12-27T12:03:59.357 回答
0

我还想使用 NTLM 连接到 Microsoft LDAP 目录。

不幸的是,微软在 LDAP 管理员权限方面存在差异,这取决于您连接的是 Kerberos/NTLM 还是 BIND/MD5,而我对使用标准管理工具感到厌烦。而 Kerberos 仅限于用户、用户客户端和 LDAP 服务器在同一个域中,并且需要为 JRE 配置容易出错的 JAAS 配置文件。

因为它是周围最常用的目录,而且我也找不到任何现有的解决方案,所以我尝试自己创建一个 NTLM BIND 解决方案,我成功了。

它是一个单一的 Java 类文件,它使用额外的 LDAP BIND 类扩展了 UnboundID Java LDAP SDK: https ://sourceforge.net/projects/javaldapntlmbind/

该解决方案使用 UnboundID Java LDAP SDK,对于 NTLM 处理,它使用 samba.org 的 JCIF Java 库。由于使用 JCIF,它是平台独立的,不需要在 Windows 上运行。

于 2013-12-20T18:28:55.957 回答