ActiveDirectory DirectorySearcher:检查用户是否是组的成员

4
我想知道一个指定的用户是否是某个组的成员。虽然我不太了解ActiveDirectory或Exchange服务器,但在Outlook中我可以看到一个用户可以“memberOf”一个组(我可以使用DirectorySearcher.PropertiesToLoad.Add("memberof");查询这些组),但也有其他组,用户并不是积极的“members of”,而是包含在其中的用户。如果您向这些组(或别名)发送邮件,则会联系到其中包含的所有用户。
基本上,给定用户名(如DOMAIN\JDoe),如何在C#中检查它是否包含在组FUNNY_USERS中?
3个回答

12

如果可用的话,请使用添加在 .Net 3.5 中的System.DirectoryServices.AccountManagement 命名空间。以下是一个检查群组的示例:

using(var pc = new PrincipalContext(ContextType.Domain))
using(var user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, "DOMAIN\JDoe"))
using(var group = GroupPrincipal.FindByIdentity(pc, "FUNNY_USERS"))
{
    return user.IsMemberOf(group);
 }

1
你需要处理掉pc、用户和组。 - hwiechers
它不显示父级的父级(组A有嵌套的组B,用户X是B的成员- userX.IsMemberOf(GroupA) = false)。有没有办法在不编写递归代码的情况下使其工作? - Philipp Munin

1

1
您在Outlook中看到的用户可能是分发组。在Active Directory中有分发组和安全组。看起来您想检查其中之一。
请参阅我的帖子this similar question,其中提供了使用仅ldap调用的C#示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接