以递归方式为用户获取组总是会产生不同的结果

时间:2014-07-31 07:29:06

标签: c# active-directory ldap

我目前正在使用我们产品中的授权系统的一部分,我们遇到的问题是获取用户所在的所有组(包括嵌套组)。

用户MyUser位于以下群组中:     GroupA     GroupB

GroupBGroupC的成员,GroupCGroupD的成员。 我想要的输出是:GroupA, GroupB, GroupC, GroupD

使用我的代码,几乎每次运行查询时,我都会以完全相同的用户获得不同的结果。 结果从完整列表到第一级或仅缺少GroupD

我的代码如下。 我使用IndexOf解析字符串的部分只是为了获取组名,因为返回的值类似于CN=GroupA,OU=Groups,OU=XYZ,DC=abc,DC=XXX

static void Main(string[] args)
{
    var groups = new List<string>();
    var searcher = new DirectorySearcher(...);
    GetGroupsRecursively("MyUser", groups, searcher);
}

private static void GetGroupsRecursively(string group, List<string> groups, DirectorySearcher search)
{
    search.Filter = string.Format("(cn={0})", group);
    search.PropertiesToLoad.Add("memberOf");

    var searchResults = search.FindAll();
    foreach (SearchResult result in searchResults)
    {
        foreach (var dn in result.Properties["memberof"].Cast<string>())
        {
            var equalsIndex = dn.IndexOf("=", 1);

            if (equalsIndex != -1)
            {
                var commaIndex = dn.IndexOf(",", 1);
                var subGroup = dn.Substring(equalsIndex + 1, commaIndex - equalsIndex - 1);
                if (!groups.Contains(subGroup))
                {
                    groups.Add(subGroup);
                    GetGroupsRecursively(subGroup, groups, search);
                }
            }
        }
    }
}

我获得小组的方式有问题吗? (请不要建议使用PrincipalContext等,因为我们不能在这里使用它们。)

这可能是AD服务器的配置问题吗?

0 个答案:

没有答案