Как войти в apaches под пользователем без прав администратора

Я пытаюсь войти с пользователем в ApacheDS через Java.

Это данные моего пользователя, экспортированные в ldif:

dn: uid=carlspring,ou=users,ou=system
objectClass: top
objectClass: inetOrgPerson
objectClass: person
objectClass: organizationalPerson
cn: Martin Todorov
sn: Todorov
uid: carlspring
userPassword:: e1NTSEF9bC9LRk45RllHdW5aVGdLcUtScmNTYk80RXRLMmJvbTEvM2NOYnc9PQ==

Это код, который у меня есть:

    // Set up environment for creating initial context
    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:10389/ou=users,ou=system");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "uid=carlspring,ou=users,ou=system");
    env.put(Context.SECURITY_CREDENTIALS, "password");

    try
    {
        // Create initial context
        DirContext ctx = new InitialDirContext(env);

        System.out.println(ctx.lookup("ou=users"));
        System.out.println("Logged in.");

        // do something useful with ctx

        // Close the context when we're done
        ctx.close();
    }
    catch (NamingException e)
    {
        e.printStackTrace();
    }

Я получаю следующее исключение:

javax.naming.NameNotFoundException: [LDAP: error code 32 - NO_SUCH_OBJECT: failed for MessageType : SEARCH_REQUEST
Message ID : 2
    SearchRequest
        baseDn : 'ou=users,ou=users,ou=system'
        filter : '(objectClass=*)'
        scope : base object
        typesOnly : false
        Size Limit : no limit
        Time Limit : no limit
        Deref Aliases : deref Always
        attributes : 
org.apache.directory.api.ldap.model.message.SearchRequestImpl@c7594470    ManageDsaITImpl Control
        Type OID    : '2.16.840.1.113730.3.4.2'
        Criticality : 'false'
'
: ERR_648 Invalid search base ou=users,ou=users,ou=system]; remaining name 'ou=users'

Насколько я понимаю, он не подключен должным образом. Я попытался войти в систему через Apache Directory Studio (с uid=carlspring,ou=users,ou=system), и это работает нормально. Я также могу войти в систему с правами администратора следующим образом:

    env.put(Context.PROVIDER_URL, "ldap://localhost:10389/ou=system");
    env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
    env.put(Context.SECURITY_CREDENTIALS, "secret");

Может кто-нибудь сказать мне, что я делаю неправильно и почему он не входит в систему? Кажется, я не могу понять это. Спасибо заранее!


person carlspring    schedule 09.09.2013    source источник


Ответы (1)


Похоже, вы предоставляете базовое DN в своем Provider_URL, который уже указывает ветвь «ou=users» вашего дерева каталогов. Попробуйте изменить его на:

ldap://локальный: 10389/ou=система

person binarycube    schedule 20.09.2013