1

Spring の LDAP パッケージを使用して Active Directory に対して認証しようとしていますが、間違った baseDN を指定したというエラーが表示され続けます (Ldap エラー コード 32):

org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031001E4, problem 2001 (NO_OBJECT), data 0, best match of:
   [testng]     'OU=People,DC=example,DC=com'
   [testng] ]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031001E4, problem 2001 (NO_OBJECT), data 0, best match of:
   [testng]     'OU=People,DC=example,DC=com'
   [testng] ]; remaining name 'ou=people,dc=example,dc=com'

奇妙なことは、ldapsearch コマンドが正確な basedn を使用し、それが機能することです。

ldapsearch -V -x -H ldap://ad.example.com:389 -b 'ou=people,dc=example,dc=com' -D '<user>' -w '<password>' (sAMAccountName=<user>)

次のコードは DN を設定します (ldapContextSource はプログラムで設定されます)。

AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("sAMAccountName", user));
DistinguishedName dn = new DistinguishedName("ou=people,dc=example,dc=com");
boolean in = ldapTemplate.authenticate(dn, filter.toString(), password);

これが役立つかどうかはわかりませんが、これらは他のフィールドです。

userDN = <myusername>@example.com
url = ldap://ad.example.com:389
password = <mypassword>
baseDN = ou=people,dc=example,dc=com

編集: userDN を変更しました: cn=username,out=people,dc=example,dc=com これでもエラー 32 コードが返されます。

4

4 に答える 4

5

みんなありがとう、あなたの手がかりは実際に問題を明らかにしました。

まず、userDN が正しくありませんでした。私はそれを修正しました(元の投稿の編集を参照)。

次に、ldapContextSource で baseDN を既に指定しているため、authenticate() を呼び出すときに再度指定する必要はありません。したがって、使用DistinguishedName.EMPTY_PATHすることでその問題は解決しました。

3 番目に、equals フィルターが正しくありませんでした。sAMAccountNameuserDN を変更したときに、元々設定されていた userDN ではなく、実際のログイン名に変更する必要があることを忘れていました。

ldapTemplate.authenticate() が true を返すようになりました。これは、認証済みであることを意味します。

于 2012-12-04T17:54:22.710 に答える
1

これはベースDNの問題ではないと思います。ユーザーが見つからなかったと思います。検索範囲を正しく設定していますか?

于 2012-12-03T21:34:26.957 に答える
1

検索のベース オブジェクト (引数の値) は、単純なバインド (引数)-bで使用される識別名とは異なります。-D結果コード32(検索応答内) は、ベース オブジェクト (検索要求内) が見つからなかったことを意味します。

こちらもご覧ください

于 2012-12-04T09:21:28.230 に答える
1

あなたの userDN は疑わしいようです。DN は cn='username',ou='rest of path',dc=example,dc=com のようになります。あなたのコードでは使用されていません。ユーザーのみです。ユーザーは「ユーザー名」である必要があります。

于 2012-12-04T04:28:47.970 に答える