我有一个使用我们的Active Directory运行Windows身份验证的Web应用程序。我有一个新的要求,从Active Directory条目中提取一些个人信息。获取此信息的最简单方法是什么?
答案 0 :(得分:17)
通过DirectoryEntry直接访问用户似乎是最简单的方法。以下是我从第一个与AD相关的项目中学到的与AD相关的花絮:
如果你不知道它的路径,你可能需要使用DirectorySearcher来获取用户的目录条目(只有让他登录才能进入)。使用它相当容易,但要注意LDAP语法中的怪癖;即,必须编码非ASCII(和其他?)字符。您使用的搜索字符串可能类似于:(&(sAMAccountName = whatever)(class = user))。这不是我的头脑,可能稍微不正确。
Active Directory schema reference会很有用。请理解可以修改和扩展架构(例如,安装Exchange会将邮箱信息添加到用户)。
AD Explorer是一个非常有用的工具,可用于调试和低级AD数据管理。当我知道要设置哪个属性但在AD管理工具中找不到正确的对话框时,我发现它很有用。
答案 1 :(得分:5)
您可能会发现以下代码段可用作启动器。
public static bool IsUserInGroup(string lanid, string group)
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
if(entry != null)
{
entry.Username=@"LDAPUSER";
entry.Password="LDAPPASSWORD";
DirectorySearcher srch = new DirectorySearcher(entry);
srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid);
srch.PropertiesToLoad.Add("memberOf");
SearchResult result = srch.FindOne();
if(result != null)
{
if(result.Properties.Contains("memberOf"))
{
string lookfor = String.Format("cn={0},", group.ToLower());
foreach(string memberOf in result.Properties["memberOf"])
{
if(memberOf.ToLower().StartsWith(lookfor))
return true;
}
}
}
return false;
}
throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}", lanid, group));
}
答案 2 :(得分:5)
答案 3 :(得分:1)
查看System.DirectoryServices名称空间:
答案 4 :(得分:0)
我使用标准LDAP库从Active Directory服务器检索信息,但您必须验证所需数据是否可通过LDAP服务器架构获得。通常,您可以获取存储在InetOrganizationalPerson中的任何信息以及与其所属组相关的大部分信息。