Currently, I'm using user and password as the connection credentials to ldap (in order to authenticate user of 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 回答
算了吧 . Java中没有对NTLM的SASL支持 . 使用GSS-API . 总是弃权使用专有技术,有一个死胡同 . 永远不要使用
simple
auth,它会在明文上传输密码 . 至少使用Digest MD5 .我还想使用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上运行 .