首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DistinguishedName查询活动目录

使用DistinguishedName查询活动目录
EN

Stack Overflow用户
提问于 2018-07-26 11:31:10
回答 1查看 3.7K关注 0票数 2

我有一个使用Windows身份验证的应用程序,我正在尝试使用他们的域ID获取登录用户的信息。

返回的部分数据是用户经理的DN (在manager属性中)。我需要再次查询AD以获取经理的信息(域id、电子邮件、姓名等)。我搜索了一下,但找不到任何关于我必须在我的过滤器中使用什么的提示。

这就是我正在使用的,并且我总是得到null的返回:

代码语言:javascript
复制
private static DirectoryEntry GetUserDEByDN(string sDN)
{
    using (HostingEnvironment.Impersonate())
    {
        PrincipalContext pc = new PrincipalContext(ContextType.Domain, adUSADomain, adUSAContainer);
        //UserPrincipal up = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, UserID);
        UserPrincipal qbeUser = new UserPrincipal(pc);
        //qbeUser.SamAccountName = UserID.Trim().ToUpper();

        PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
        PrincipalSearchResult<Principal> psr = srch.FindAll();

        string sDomain = ConfigurationManager.AppSettings["Domain"].ToString();
        string adPath = ConfigurationManager.AppSettings["ADPath"].ToString();

        DirectoryEntry de = new DirectoryEntry(adPath);
        DirectorySearcher deSearch = new DirectorySearcher();
        deSearch.SearchRoot = de;
        deSearch.Filter = "(&(objectClass=user)(| (cn = " + sDN + ")(dn = " + sDN + ")))";

        //deSearch.Filter = "(&(objectClass=user)(SAMAccountName=" + UserID + "))";
        deSearch.SearchScope = SearchScope.Subtree;
        SearchResult results = deSearch.FindOne();

        if (null != results)
        {
            de = new DirectoryEntry(results.Path);
            return de;
        }
        else
        {
            return null;
        }
    }
}

是否可以按DN搜索Active Directory?如果是这样,我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 22:46:39

这就是对我有效的方法。然而,我相信它应该与objectClass=user一起工作,但我总是得到null返回。当我更改为distinguishedName = sDN时,它起作用了。

这段代码的全部要点

DirectoryEntry de = new DirectoryEntry(adPath + "/" + sDN);

是从用户对象开始目录搜索;应该不需要额外的搜索来说明是哪个distinguishedName。

代码语言:javascript
复制
private static DirectoryEntry GetUserDEByDN(string sDN)
{
    string adPath = ConfigurationManager.AppSettings["ADPath"].ToString();
    DirectoryEntry de = new DirectoryEntry(adPath + "/" + sDN);
    DirectoryEntry deManager = null;

    using (DirectorySearcher Search = new DirectorySearcher())
    {
        Search.SearchRoot = de;
        Search.Filter = "(&(distinguishedName=" + sDN + "))";
        //Search.Filter = "(objectClass = user)";
        Search.SearchScope = SearchScope.Base;
        SearchResult Result = Search.FindOne();

        if (null != Result)
            deManager = Result.GetDirectoryEntry();
    }
    return deManager;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51530593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档