使用嵌套组在AD中获取用户组

时间:2014-12-04 18:52:29

标签: c# active-directory adgroup

我不知道"嵌套"是我需要的词,但这里有解释:

我有一个用户," John"。 "约翰"是该组织的成员" A"。小组" B"有团体" A"作为会员。

所以,传递性的," John"也应该是小组成员" B"。

当我找回约翰的小组时,我只得到" 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();

我怎样才能做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

我最终使用了用户的“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;
   }
}

它是thisthis链接的混合,其中objectSid是我按名称找到的组的objectSID。

非常感谢你的帮助!