Chr*_*nal 10 c# active-directory
我有一个使用我们的Active Directory运行Windows身份验证的Web应用程序.我有一个新的要求,从Active Directory条目中提取一些个人信息.获取此信息的最简单方法是什么?
San*_*der 17
直接通过DirectoryEntry访问用户似乎是最直接的方法.以下是我从第一个AD相关项目中学到的与AD相关的花絮:
如果你不知道它的路径,你可能需要使用DirectorySearcher来获取用户的目录条目(你只需登录就不会知道它).使用它相当容易,但要注意LDAP语法中的怪癖; 即,必须编码非ASCII(和其他?)字符.您使用的搜索字符串可能类似于:(&(sAMAccountName = whatever)(class = user)).这是我的头顶,可能会略有不正确.
在Active Directory架构参考将是有益的.请理解可以修改和扩展架构(例如,安装Exchange会将邮箱信息添加到用户).
AD Explorer是一个非常有用的工具,可用于调试和低级AD数据管理.当我知道要设置哪个属性但在AD管理工具中找不到正确的对话框时,我发现它很有用.
您可能会发现以下代码段可用作启动器.
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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12863 次 |
| 最近记录: |