我是JNDI和Active Directory的新手 我需要编写一个简单的AD客户端(用Java编写) 它应支持基本用户身份验证以及对用户和组的CRUD操作。
我发现asyncio.wait对基础知识非常有帮助 我已经设法在虚拟机上安装Windows Server 2012 R2并从代码连接到其Active Directory。
问题在于,据我所知,整个通信都是通过网络以明文形式发送的,包括我的用户名,密码和操作。
我应该使用Kerberos进行身份验证吗? 所有我对Kerberos的了解都是我所读到的This tutorial 对我而言,最好的解决方案是通过我当前对JNDI的非常简单的使用来“插入”我的通信安全性的最简单方法。
我也非常欣赏在我的虚拟机上使用AD进行此类通信的最简单方法。
private static DirContext getDirContext() {
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://" + serverIpAddress + ":" + Integer.toString(serverLdapPort));
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, connectionUsername + "@" + serverDomain);
env.put(Context.SECURITY_CREDENTIALS, connectionPassword);
try {
return new InitialDirContext(env);
} catch (NamingException e) {
return null;
}
}
public static boolean authenticate(String username, String password) {
connectionUsername = username;
connectionPassword = password;
DirContext dirContext = getDirContext();
if (dirContext != null) {
closeDirContext(dirContext);
return true;
} else {
return false;
}
}