|
20分
#1 |
LDAP登陆没用过,我也不敢妄言。查找AD中的用户信息我给你一个我的代码供参考~
DirectoryEntry entry = new DirectoryEntry("LDAP://" + Domain.GetCurrentDomain());
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectClass=user)(displayname=" + user.Name + "))"; //user表示用户,group表示组
mySearcher.PropertiesToLoad.Add("userPrincipalName");
mySearcher.PropertiesToLoad.Add("department");
mySearcher.PropertiesToLoad.Add("mail");
mySearcher.PropertiesToLoad.Add("title");
try
{
var result = mySearcher.FindOne();
if (result != null)
{
if (result.Properties.Contains("mail"))
{
user.Email = result.Properties["mail"][0].ToString();
}
else
{
user.Email = "null@null.com";
}
if (result.Properties.Contains("department"))
{
Department = result.Properties["department"][0].ToString().ToLower();
}
if (result.Properties.Contains("title"))
{
title = result.Properties["title"][0].ToString().ToLower();
}
}
}
catch(Exception e)
{
user.Email = "fail ad search";
throw;
}
});
我因为个人的需求,在生成DirectoryEntry时不需要提供账号密码,但是跨域查询据我经验来看提供异域的AD用户的账号密码是解决问题的捷径。 |
|
20分
#2 |
mysearcher.findone()根据filter条件获取一条记录,
findall()获取很多条记录。此时应注意上限 |
|
#3 |
回复1楼: 我想请问一下那个path,也就是你上面代码上的”LDAP://” + Domain.GetCurrentDomain(),需要用到哪些参数?怎么配. |
|
#4 |
回复2楼: 我顺便问一下,是不是不同公司的searcher.Filter = “(objectClass=account)”; objectClass的值都不一样,有人用account表示用户,有人用Users表示,searcher.PropertiesToLoad.Add(“cn”);还有这个,cn是不是表示的获取User的哪一个属性?如果我不知道数据库是什么样的我有什么方法可以查询到么? |
|
#5 |
回复1楼: 我顺便问一下,是不是不同公司的searcher.Filter = “(objectClass=account)”; objectClass的值都不一样,有人用account表示用户,有人用Users表示,searcher.PropertiesToLoad.Add(“cn”);还有这个,cn是不是表示的获取User的哪一个属性?如果我不知道数据库是什么样的我有什么方法可以查询到么? |
|
#6 |
|