要使用ldap测试用户名 - 密码组合,请执行以下操作
这对我来说很好,直到我注意到一些正确的组合无法正常工作。 (这些主要是很久以前创建的帐户)
有没有办法在ldap目录中列出用户但是不允许连接到ldap服务器本身?!我当前的代码只是使用masteruser来搜索要检查的用户名,但最后它只是一个与用户名 - 密码组合的新连接来检查。
我是否应该与masteruser连接,然后使用用户名 - 密码组合进行绑定?
这是我检查组合的部分:
static boolean CheckLDAPConnection(String user_name, String user_password) {
try {
Hashtable<String, String> env1 = new Hashtable<String, String>();
env1.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env1.put(Context.SECURITY_AUTHENTICATION, "simple");
env1.put(Context.SECURITY_PRINCIPAL, user_name);
env1.put(Context.SECURITY_CREDENTIALS, user_password);
env1.put(Context.PROVIDER_URL, ip);
try {
//Connect with ldap
new InitialLdapContext(env1, null);
//Connection succeeded
System.out.println("Connection succeeded!");
return true;
} catch (AuthenticationException e) {
//Connection failed
System.out.println("Connection failed!");
e.printStackTrace();
return false;
}
}
catch (Exception e) {
}
return false;
}
答案 0 :(得分:3)
找到用户的DN后,您应该将这些凭据添加到第一个上下文的环境中,然后尝试重新连接()。这就是LDAP绑定操作。
答案 1 :(得分:0)
我们通过直接使用其用户和密码来检查用户和密码以创建LDAP连接。如果可以创建连接,则授权使用。然后使用相同的连接在LDAP中搜索用户权限(如果没有权限无法访问有关用户的应用程序的验证)。这可能不是最好的方法,但在2层应用程序中无法使用主用户创建第一个LDAP连接(安全性问题关于将主用户存储在客户端GUI中),如我们的情况。
也许你可以改变你的方法。
这种方法在创建新用户时有一些缺点,因此需要将LDAP的特殊权限授予GUI的“admin”用户以创建其他用户但不管理LDAP ...