访问Active Directory以获取asp.net中的用户管理器

时间:2013-05-13 09:31:41

标签: c# asp.net active-directory

我正在创建一个应用程序的用户管理模块,该模块基本上会根据域登录详细信息验证用户凭据。认证不是问题,问题在于我需要获得特定用户的经理。

我使用以下方法检索用户的“Manager”属性:

DirectoryEntry de = new DirectoryEntry(path, user, pass, AuthenticationTypes.Secure);
DirectorySearcher ds = new DirectorySearcher();
ds.SearchRoot = new DirectoryEntry("LDAP://xyzDomain", "UserName", "pwd");
ds.Filter = "(|(&(objectCategory=person)(objectClass=user)(mailnickname=*domainalias*)))";
//ds.PropertyNamesOnly = true;
ds.PropertiesToLoad.Add("manager");

List<string> users = new List<string>();
string s = "undefined";

foreach (SearchResult sr in ds.FindAll())
{
    DirectoryEntry dee = sr.GetDirectoryEntry();
    s = (string)dee.Properties[""].Value ?? "<undefined>";                    
    users.Add(s);
}

这会以这种方式返回管理器详细信息:

CN=First LastName,OU=Managers,OU=Engineering,OU=Central,OU=Something,DC=XYZ,DC=XYZ,DC=XYZRE

我所做的是使用字符串操作来提取CN,然后在该CN上运行查询以查找管理器的详细信息。然而问题是CN在这里不是唯一的。可能有两个或更多同名的人。我基本上需要的是一种方法,它返回用户的经理ALIAS(不是CN或任何东西)。

请提供任何帮助,我们将非常感谢。接受建议。 非常感谢

1 个答案:

答案 0 :(得分:0)

有一个名为 mailNickname 的字段。

此链接:In active directory, what is mailNickname used for?包含有关它的更多信息。问题是:它用于Exchange服务器。

这意味着该值可以为null或为空。这是Visual Basic中的一个示例:http://www.vbforums.com/showthread.php?615131-RESOLVED-Get-logged-in-user-s-Alias-from-LDAP,它解释了如何以及如何使用。