web-dev-qa-db-ja.com

適切なLDAPパラメータを見つける方法

現在、Active DirectoryといくつかのLDAPに関する小さなプロジェクトに取り組んでいます... LDAPサーバーに接続しようとすると、常に同じエラーが発生します。

[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1

私が知っている限り、これは資格情報が間違っていることを意味しますが、100%正しいと確信しています!パラメータを忘れたのでしょうか?

Hashtable<String, String> env = new Hashtable<String, String>();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://libertycity.ch:389/dc=libertycity,dc=ch");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.SECURITY_PRINCIPAL, "uid=" + username + ",ou=Users");
env.put("Java.naming.ldap.attributes.binary", "objectSID");

DirContext ctx = new InitialDirContext(env);

私のコードは正しいように見えると思いますか、それとも何かを見逃しましたか?何が問題であり、どのようにそれを見つけることができますか?

10
muffin

エラーで提供される値「data 52e」は、バインドが失敗したことを意味します。ユーザー名は有効であるが、パスワード/資格情報が無効である場合に返されます。

http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors

17
jwilleke

この問題は、完全なドメインがユーザー名に含まれていない場合にも発生することがあります。

セキュリティプリンシパルをusername@domainとして設定します。

InitialLdapContext ldapContext = new InitialLdapContext();
ldapContext.addToEnvironment(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
ldapContext.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
ldapContext.addToEnvironment(Context.SECURITY_PRINCIPAL, userId + "@mydomain.com");
ldapContext.addToEnvironment(Context.SECURITY_CREDENTIALS, password);                  
ldapContext.addToEnvironment(Context.PROVIDER_URL, "ldap://" + ldapHost + ":" + ldapPort);
10
Steven Wolfe

WildflyからMicrosoft Active Directoryサーバーへの接続を保護しようとするときに問題が発生しました。主な問題は、接続文字列がどうあるべきかを知らないことです。
Sysinternalsの「Active Directory Explorer」をインストールした場合、Microsoftが提供するキットを取ります。バインドしたいオブジェクトを検索すると、「パス:」設定が表示されます。これは、Context.SECURITY_PRINCIPAL値の引数で引用する必要がある値の文字列です。私の場合、パス文字列は次の形式でした

CN =フレッドブログ、OU = XXXユーザー、DC = foo-bar、DC = com、xxx.foo-bar.com:389 [xxx.foo-bar.com]]

必要な引数は

"CN = Fred Blogs、OU = XXX Users、DC = foo-bar、DC = com"

スペースは非常に重要であることに注意してください

3
Dave

LDAPエラーコード49は「無効な資格情報」を示します。これは、LDAPサーバーに送信したパスワードが正しくなかったことを意味します。

1
Bora

Active Directory:ドメインコンテナを確認します。

EDirectoryからActive Directoryへの移行で同じエラーが発生しました。ユーザー名とパスワードは正しいようですが、何らかの理由で、パスワードが正しくないことを示す「52e」エラーが発生しました。

DC(ドメインコンテナー)をプリンシパルに追加して機能させる必要がありました。

これは機能していませんでした:

env.put(Context.SECURITY_PRINCIPAL, "CN="+username+",OU=Users,OU=Org,OU=ETC");

DCの追加:(これは私にとってはうまくいきました)

 env.put(Context.SECURITY_PRINCIPAL, "CN="+username+",OU=Users,OU=Org,OU=ETC,DC=yourorg,DC=com");

これでActive Directoryの問題が解決しました。

この問題を解決するのに本当に役立つのは、linux ldapbind/ldapsearchコマンドを使用してバインドしようとした https://docs.Oracle.com/cd/B10501_01/network.920/a96579/comtools.htm

ldapbind/ldapsearchコマンドを使用してOSから機能させると、コードで使用する正確なパラメーターがわかります。

1
Israelm

DirContext ldapContext;

    Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
      ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
      //ldapEnv.put(Context.PROVIDER_URL,  "ldap://societe.fr:389");
      ldapEnv.put(Context.PROVIDER_URL,  "ldap://10.112.115.14:389");
      ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
      ldapEnv.put(Context.SECURITY_PRINCIPAL, "[email protected]");
      ldapEnv.put(Context.SECURITY_CREDENTIALS, "ca$hc0w");
      //ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
      //ldapEnv.put(Context.SECURITY_PROTOCOL, "simple");
      ldapContext = new InitialDirContext(ldapEnv);

      System.out.println(ldapContext);

      // Create the search controls         
      SearchControls searchCtls = new SearchControls();

      //Specify the attributes to return
      String returnedAtts[]={"sn","givenName", "samAccountName", "mail"};
      searchCtls.setReturningAttributes(returnedAtts);

      //Specify the search scope
      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

      //specify the LDAP search filter
      String searchFilter = "(&(objectClass=user)(mail=*))";

      //Specify the Base for the search
      String searchBase = "DC=VIEWCONNECTION, DC=COM";
      //initialize counter to total the results
      int totalResults = 0;

   // Search for objects using the filter
      NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls);

    //Loop through the search results
      while (answer.hasMoreElements())
      {
        SearchResult sr = (SearchResult)answer.next();

        totalResults++;

        System.out.println(">>>" + sr.getName());
        Attributes attrs = sr.getAttributes();
        System.out.println(">>>>>>" + attrs.get("samAccountName"));
      }

      System.out.println("Total results: " + totalResults);
      ldapContext.close();
0
keniee van