我必须使用LDAP对用户进行系统身份验证,我的问题是我有很多组织而且我没有列表用户组织。
我有这个代码工作迫使一个知道组织:
ldap.validate("uid=" + this.email + ",ou="+ThisIsTheOrImForcing+",ou=users,dc=myDC,dc=com,dc=br", this.password);
我的验证方法:
public boolean validate(String principal, String password){
// Set up the environment for creating the initial context
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//env.put(Context.PROVIDER_URL, "ldap://IP:PORT/DC=opus");
//env.put(Context.PROVIDER_URL, "ldap://IP:PORT/dc=mydc,dc=com,dc=br");
env.put(Context.PROVIDER_URL, "ldap://IP:PORT/dc=mydc,dc=com,dc=br");
//Authenticate as S. User and password
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL,principal );
env.put(Context.SECURITY_CREDENTIALS, password);
try{
// Create the initial context
DirContext ctx = new InitialDirContext(env);
return true;
} catch( AuthenticationException ae ) {
return false;
} catch( NamingException ne ) {
return false;
}
}
我有var ThisIsTheOrImForcing,如何在不知道他的组织的情况下验证用户,我必须首先搜索它,怎么样?
答案 0 :(得分:1)
LDAP中的简单绑定要求您提供用户的DN,因此需要了解组织的原因。
您有两种方法可以处理它:
在您的目录中搜索具有属性uid = this.email
的用户,检索他的DN,并使用找到的DN进行身份验证以验证用户
使用其他方式进行身份验证,例如SASL机制:See this for more information。您还必须查找您的目录配置支持哪种机制
答案 1 :(得分:0)
通常,uid
是唯一标识符。搜索操作用于将给定的uid映射到其可分辨名称,因此您不必担心帐户在目录中的确切位置。