web-dev-qa-db-ja.com

javax.naming.AuthenticationException:[LDAP:エラーコード49-無効な認証情報]

私はLDAPが初めてで、誰かがすでにテスト用に設定したLDAPインスタンスを使用してSpring LDAPモジュールをテストする簡単な例だと思っていたものを試していました。

私が使用しているLDAPインスタンスの詳細は、ここにあります: http://blog.stuartlewis.com/2008/07/07/test-ldap-service/comment-page-3/

LDAPブラウザー/管理ツール(Softerra LDAP Admin)を使用しており、問題なくディレクトリにアクセスできます。

Javaとspring-ldap(2.0.1)を使用して試してみると、上記の認証例外が発生します。これをトラブルシューティングするために独自のLDAPインスタンスを設定する前に、ここで確認したいと思いますもっと経験のある誰かが私が見逃した明白な何かを指摘するかもしれない場合に備えて。

以下は私が使用しているコードです:

import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.LdapContextSource;

import Java.util.List;

public class LdapTest {


public List<String> getListing() {

    LdapTemplate template = getTemplate();

    List<String> children = template.list("dc=testathon,dc=net");

   return children;
}


private LdapTemplate getTemplate(){

    LdapContextSource contextSource = new LdapContextSource();
    contextSource.setUrl("ldap://ldap.testathon.net:389");
    contextSource.setUserDn("cn=john");
    contextSource.setPassword("john");

    try {
        contextSource.afterPropertiesSet();
    } catch (Exception ex) {
        ex.printStackTrace();
    }


    LdapTemplate template = new LdapTemplate();

    template.setContextSource(contextSource);

    return template;

}


public static void main(String[] args){


    LdapTest sClient = new LdapTest();
    List<String> children = sClient.getListing();

    for  (String child :children) {
        System.out.println(child);
    }

}

}

スタックトレース:

Exception in thread "main" org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.Java:191)
at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.Java:356)
at org.springframework.ldap.core.support.AbstractContextSource.doGetContext(AbstractContextSource.Java:140)

識別名(組織単位を含む)にすべてを含める必要があることがわかりました。使用する

contextSource.setBase(...);

何らかの理由で動作しませんでした。その修正を行った後、すべてが大丈夫でした。

contextSource.setUserDn("cn=john,ou=Users,dc=testathon,dc=net");