LDAP在不知道他的ou

时间:2017-05-31 15:01:14

标签: 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){
    // 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,如何在不知道他的组织的情况下验证用户,我必须首先搜索它,怎么样?

2 个答案:

答案 0 :(得分:1)

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

您有两种方法可以处理它:

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

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

答案 1 :(得分:0)

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