使用NTLM安全协议连接到LDAP(Active Directory)

时间:2012-12-27 11:07:05

标签: java active-directory ntlm sasl

目前,我正在使用用户和密码作为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安全协议 - 身份验证 - 诚信 - 保密

2 个答案:

答案 0 :(得分:0)

算了。 Java中没有对NTLM的SASL支持。使用GSS-API。总是弃权使用专有技术,有一个死胡同。并且从不使用simple身份验证,它会在明文上传输密码。至少使用摘要MD5。

答案 1 :(得分: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上运行。