我想使用LDAP将一个应用程序远程部署到活动目录服务器中DOMAIN CONTROLLER下的所有主机上。我可以使用下面的代码片段来获取所有主机的详细信息。
searchFilter = (&(objectCategory=computer)(objectClass=computer))";
然后,我尝试用JAVA代码来获取用户的密码,但代码返回的密码属性为空。
String filter = "(&(objectclass=person))";
results = dirContext.search("", filter, controls);
while (results.hasMore()) {
SearchResult searchResult = (SearchResult) results.next();
Attributes attributes = searchResult.getAttributes();
NamingEnumeration<? extends Attribute> attrs = attributes.getAll();
while (attrs.hasMore()) {
System.out.println(attrs.next());
}
Attribute pwd = attributes.get("userPassword");
if(pwd==null)
{
System.out.println("NullPointerException thrown!");
}
else
{
System.out.println("=> userPassword : " + new String((byte[])pwd.get()));
}
请问我的方法是正确的吗,还是有其他方法可以为一个DC下的所有主机部署一个应用程序?
微软活动目录不会返回密码,密码是加密的,通常在一个名为unicodePwd的属性中。(与 用户密码)
该 userPassword
属性其实只是真正的密码属性的一个稍微容易使用的同义词,也就是 unicodePwd
. 但这两个属性只用于修改或重置密码。文件中的 unicodePwd
说。
unicodePwd属性永远不会被LDAP搜索返回。
所以你不能做你试图做的事情。
任何一个好的认证系统都应该这样工作。