Почему атрибут userPassword для некоторых пользователей имеет значение null, когда я запрашиваю всех пользователей в группе Active Directory через LDAP? - PullRequest
1 голос
/ 01 июня 2011

Вот код, который я использую:

Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.put(Context.SECURITY_PRINCIPAL, "Administrator@ABC");
environment.put(Context.SECURITY_CREDENTIALS, "testing123");
environment.put(Context.PROVIDER_URL, "ldap://192.168.64.222");
DirContext dirContext = new InitialDirContext(environment);
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration searchResults = dirContext.search("cn=users,dc=ABC,dc=DEF,dc=COM", "(&(objectClass=user))", searchControls);
while (searchResults.hasMore()) {
  SearchResult searchResult = (SearchResult) searchResults.next();
  Attributes attributes = searchResult.getAttributes();
  System.out.println(attributes.get("userPassword"));
}
dirContext.close();

И результат я получаю:

null
userPassword: [B@13a328f
userPassword: [B@1cd8669
userPassword: [B@337838
null
...
null
userPassword: [B@18a47e0
null
...

1 Ответ

2 голосов
/ 01 июня 2011

Ответ в том, что он, конечно, не обеспечен.

Объяснение заключается в том, что атрибут userPassword не является собственным атрибутом для помещения пароля в Active-Directory. Собственный атрибут - unicodePwd , который является специальным атрибутом, который вы МОЖЕТЕ записать через LDAPS, но НЕ МОЖЕТЕ прочитать через LDAP.

Согласно документации Microsft о userPassword этот атрибут может вести себя как обычный атрибут или вести себя как атрибут unicodePwd, все зависит от конфигурации вашего Active-Directory или вашей службы облегченного доступа к каталогам (LDS).

Насколько я знаю, по умолчанию dSHeuristics имеет значение false, и большую часть времени он вообще не установлен, вы можете увидеть его в:

CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,Root domain in forest

Так вот почему я думаю, что userPassword просто не установлен каким-то образом в вашей инфраструктуре.

...