确定WindowsIdentity实例的嵌套组

假设我有一个WindowsIdentity的实例,并希望获得它是其成员的组。 我使用下面的代码来获取列表:

  WindowsIdentity identity = null; // get identity here identity.Groups.Translate(typeof(NTAccount)).Select(x => x.Value); 

我得到这样的东西:

  "BUILTIN\\Administrators" "BUILTIN\\Users" "NT AUTHORITY\\INTERACTIVE" "CONSOLE LOGON" 

我有一个以BUILTIN\\Administrators作为其成员的本地组(例如MYSPECIALGROUP )。 上面的示例中不返回MYSPECIALGROUP 。 我如何获得包括嵌套组的所有组?

从Active Directory获取用户的组成员身份

正如对这个问题的答案解释, System.DirectoryServices.AccountManagement命名空间是你所需要的:

 // get the user identity / roles PrincipalContext pCtx = new PrincipalContext(ContextType.Domain, Settings.Default.Domain, // domain Settings.Default.DomainReadUser, // user to access AD with Settings.Default.DomainReadPass); // password of that user UserPrincipal user = UserPrincipal.FindByIdentity(pCtx, User.Identity.Name.Split('\\').Last()); // Windows Auth current user // this will have all of the security groups, even nested ones IEnumerable<Principal> userRoles = user.GetAuthorizationGroups(); 

由于您似乎在做本地机器用户/组,并且使用您的WindowsIdentity变量,所以您需要将前几行更改为:

 PrincipalContext pCtx = new PrincipalContext(ContextType.Machine); UserPrincipal user = UserPrincipal.FindByIdentity(pCtx, identity.Name.Split('\\').Last()); 

另请参阅: 在.NET Framework 3.5中管理目录安全主体