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 コードが返されます。