[英]Get user groups in AD with nested groups
我不知道“嵌套”是否是我需要的词,但这是解释:
我有一个用户“ John”。 “ John”是“ A”组的成员。 组“ B”具有组“ A”作为成员。
因此,在传递上,“ John”也应该是“ B”组的成员。
当我检索John的组时,只会得到“ A”,而不是“ B”,如下所示:
DirectorySearcher searcher = new DirectorySearcher();
DirectoryEntry rootEntry = new DirectoryEntry(_ldap, _loginName, _password, AuthenticationTypes.ReadonlyServer);
searcher.SearchRoot = rootEntry;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = "(&(sAMAccountName=" + filter.Split('\\')[1] + ")(objectClass=user))";
searcher.PropertiesToLoad.Add("memberOf");
searcher.PropertiesToLoad.Add("displayname");
SearchResult sr = searcher.FindOne();
我该如何实现?
谢谢!
我最终使用了用户的“ tokenGroups”属性,该属性似乎返回用户所在的所有组,甚至包括他作为传递成员的那些组。
这是我的代码:
DirectorySearcher searcher = new DirectorySearcher();
DirectoryEntry rootEntry = new DirectoryEntry(_ldap, _loginName, _password, AuthenticationTypes.ReadonlyServer);
searcher.SearchRoot = rootEntry;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = "(&(sAMAccountName=" + filter.Split('\\')[1] + ")(objectClass=user))";
searcher.PropertiesToLoad.Add("memberOf");
searcher.PropertiesToLoad.Add("displayname");
SearchResult sr = searcher.FindOne();
DirectoryEntry userDirectoryEntry = result.GetDirectoryEntry();
userDirectoryEntry.RefreshCache(new string[] { "tokenGroups" });
foreach (byte[] byteEntry in userDirectoryEntry.Properties["tokenGroups"])
{
if (CompareByteArrays(byteEntry, objectSid))
{
isMember = true;
break;
}
}
它的混合这和此链接,其中的objectSID是我找到的名字该组的的objectSID。
非常感谢你的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.