如果您想要一种简单的方法,我会说UserPrincipal.GetAuthorizationGroups真的很容易。唯一的问题是您只能在 .NET 3.5 或更高版本中找到它。
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "YourUser"))
{
foreach (Principal p in user.GetAuthorizationGroups())
{
Console.WriteLine(p.Name);
}
}
}
GetAuthorizationGroups
返回所有嵌套组,包括 Well known SID。它尝试检索嵌套组信息的不同方法。实际上,它使用的一种方法是用于DirectoryEntry
访问tokenGroups
属性。
更新
要检查当前用户是否在NT AUTHORITY\INTERACTIVE
orLOCAL
中,我们可以使用WindowsIdentity.Groups
,它直接检索当前登录令牌。请注意,NT AUTHORITY\INTERACTIVE
和的成员资格LOCAL
是在运行时确定的。根据您现在登录该系统的事实,将用户分配到这些组。同样,在我的 Windows 7 上,我可以看到我当前的登录用户也是其中的成员,NT AUTHORITY\REMOTE INTERACTIVE LOGON
因为我是通过远程桌面登录的。
WindowsIdentity id = WindowsIdentity.GetCurrent();
foreach (var group in id.Groups)
{
Console.WriteLine(((NTAccount)group.Translate(typeof(NTAccount))).Value);
}
很抱歉,我不知道任何方法可以让任意用户获得会员资格NT AUTHORITY\INTERACTIVE
。我怀疑没有这种方法,因为这种类型的组成员资格仅在该用户真正登录时在运行时确定。