当前位置:  开发笔记 > 编程语言 > 正文

Active Directory:检索用户信息

如何解决《ActiveDirectory:检索用户信息》经验,为你挑选了3个好方法。

我有一个使用我们的Active Directory运行Windows身份验证的Web应用程序.我有一个新的要求,从Active Directory条目中提取一些个人信息.获取此信息的最简单方法是什么?



1> Sander..:

直接通过DirectoryEntry访问用户似乎是最直接的方法.以下是我从第一个AD相关项目中学到的与AD相关的花絮:

在URI中,以小写形式编写LDAP.否则你会得到一个神秘的错误.我在这个令人沮丧的问题上花了一天多的时间......

要清除单值属性,请将其设置为空字符串,而不是null.Null导致异常.

要清除多值属性,请使用DirectoryEntry.Property.Clear()方法.

Active Directory架构引用将指出值将是哪种数据类型以及它是多值还是单值.

您不需要在Directoryentry上手动RefreshCache(),但如果您曾使用它并指定要缓存的属性,请知道它将来不会自动检索任何其他属性.

在您使用System.DirectoryServices中的类时,绝对可以抛出COMException.留意那些尝试块.不要认为任何事情都是安全的.

如果你不知道它的路径,你可能需要使用DirectorySearcher来获取用户的目录条目(你只需登录就不会知道它).使用它相当容易,但要注意LDAP语法中的怪癖; 即,必须编码非ASCII(和其他?)字符.您使用的搜索字符串可能类似于:(&(sAMAccountName = whatever)(class = user)).这是我的头顶,可能会略有不正确.

在Active Directory架构参考将是有益的.请理解可以修改和扩展架构(例如,安装Exchange会将邮箱信息添加到用户).

AD Explorer是一个非常有用的工具,可用于调试和低级AD数据管理.当我知道要设置哪个属性但在AD管理工具中找不到正确的对话框时,我发现它很有用.



2> paul..:

您可能会发现以下代码段可用作启动器.

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));
}



3> Panos..:

一个非常好的参考:Howto :(几乎)通过C#在Active Directory中的一切

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有