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 |