【问题标题】:Query Active Directory using DistinguishedName使用 DistinguishedName 查询 Active Directory
【发布时间】:2018-07-26 03:31:10
【问题描述】:

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

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

这是我正在使用的,我总是返回 null:

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?如果是这样,我做错了什么?

【问题讨论】:

    标签: c# active-directory distinguishedname


    【解决方案1】:

    这对我有用。但是,我相信它应该与 objectClass=user 一起使用,但我一直返回 null。当我更改为 distinctName = sDN 时,它起作用了。

    这段代码的重点

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

    是在用户对象处开始目录搜索;不需要额外搜索说出 which distinctName。

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

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2010-11-08
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      相关资源
      最近更新 更多