检查组成员身份

时间:2011-06-15 14:38:17

标签: c# active-directory directoryservices

我正在使用UserPrincipal.FindByIdentity(ctx, "SomeAdminAccountName").GetGroups()针对Active Directory中的组授权用户。它适用于简单组,但不适用于嵌套组。假设我有以下结构:

Administrators members:
  SomeAdminAccountName

Users members
  Administrators
  SomeUserAccountName

用户组包含管理员组(因为所有管理员都应该能够执行用户可以执行的操作)。问题是UserPrincipal.FindByIdentity(ctx, "SomeAdminAccountName").GetGroups()不包含Users组。

如果我使用GroupPrincipal.FindByIdentity(ctx, groupName).Members,我确实看到Administrator组是其中的一部分,但不包括管理员帐户。

我的问题是:

我是否需要进行递归组检查才能找到用户,还是有其他方法找不到用户?

2 个答案:

答案 0 :(得分:2)

要针对某组检查用户,我会尝试使用IsMemberOf。

您也可以从另一个方向处理问题,找到该组并使用GetMembers函数获取所有成员并设置递归标志。由于大多数应用程序使用少量组,您应该能够将其缓存以便重复使用,在我的工作中,通常可以接受5到30分钟的缓存时间。

答案 1 :(得分:1)

您可能是Windows用户访问控制(Vista或Win7)的受害者。当管理员在启用UAC的情况下登录时,Windows会创建“拆分令牌”-i.e。除非/直到他们对正在运行的进程的权限明确提升,否则它们的运行就好像他们的帐户不属于管理组一样。您可以通过以管理员身份运行来提升执行过程来验证是否是这种情况(如果您在VS调试模式下运行,则以管理员身份启动VS)。