Java LDAP验证用户uid而不知道其ou

Java LDAP验证用户uid而不知道其ou,java,ldap,Java,Ldap,我必须使用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

我必须使用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,如何在不知道用户组织的情况下对其进行身份验证,我必须首先搜索它,如何进行身份验证?

通常,
uid
是唯一标识符。搜索操作用于将给定uid映射到其可分辨名称,因此您不必担心帐户在目录中的确切位置。

LDAP中的简单绑定要求您提供用户的DN,因此您需要了解组织

您有两种方法来处理它:

  • 在目录中搜索具有属性
    uid=this.email
    的用户,检索其DN,并使用找到的DN进行身份验证以验证用户

  • 使用其他方式进行身份验证,例如SASL机制:。您还必须查找支持哪种机制的目录配置


我认为这里实现的LDAP结构现在确实允许我搜索用户的DN,但我会尝试一下。