C# 为用户递归地获取组总是会得到不同的结果
我目前正在处理产品中授权系统的一部分,我们在获取用户所在的所有组(包括嵌套组)时遇到问题 用户C# 为用户递归地获取组总是会得到不同的结果,c#,active-directory,ldap,C#,Active Directory,Ldap,我目前正在处理产品中授权系统的一部分,我们在获取用户所在的所有组(包括嵌套组)时遇到问题 用户MyUser属于以下组: GroupA GroupB GroupB是GroupC的成员,GroupC是GroupD的成员。 我想要的输出是:GroupA、GroupB、GroupC、GroupD 在我的代码中,几乎每次运行查询时,我都会为完全相同的用户获得不同的结果。 结果从完整列表到仅第一级或仅GroupD缺失,各不相同 我的代码如下。 我用IndexOf解析字符串的部分只是为了获取组名本身,因为返回
MyUser
属于以下组:
GroupA
GroupB
GroupB
是GroupC
的成员,GroupC
是GroupD
的成员。
我想要的输出是: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);
}
}
}
}
}
static void Main(字符串[]args)
{
变量组=新列表();
var searcher=newdirectorysearcher(…);
快速获取组(“MyUser”、组、搜索者);
}
私有静态void GetGroupsRecursive(字符串组、列表组、DirectorySearcher搜索)
{
search.Filter=string.Format(“(cn={0})”,group);
search.PropertiesToLoad.Add(“memberOf”);
var searchResults=search.FindAll();
foreach(searchResults中的SearchResult)
{
foreach(result.Properties[“memberof”].Cast()中的变量dn)
{
var equalsIndex=dn.IndexOf(“=”,1);
如果(相等索引!=-1)
{
var commaIndex=dn.IndexOf(“,”,1);
var subGroup=dn.Substring(equalsIndex+1,commaIndex-equalsIndex-1);
如果(!groups.Contains(subGroup))
{
组。添加(子组);
快速获取组(子组、组、搜索);
}
}
}
}
}
我的组队方式有问题吗?(请不要建议使用PrincipalContext
或类似内容,因为我们无法在此处使用它们。)
这可能是广告服务器的配置问题吗?您是为同一用户还是为属于同一组的不同用户获得不同的结果?我为完全相同的用户获得不同的结果。我现在在问题中指出了这一点。这不是最干净的方法,看看这里真正奇怪的是你使用的是同一个搜索程序,而不是每次都创建一个新的…@JPBlanc谢谢你的建议,但正如我指出的,我们不能使用PrincialContext。