Если вы хотите простой способ, я бы сказал, 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
возвращает вам все вложенные группы, включая хорошо известный SID.Он пробует разные способы получения информации о вложенной группе.Действительно, один из подходов, которые он использовал, - использовать DirectoryEntry
для доступа к атрибуту tokenGroups
.
ОБНОВЛЕНИЕ
Чтобы проверить, находится ли текущий пользователь в NT AUTHORITY\INTERACTIVE
или LOCAL
, мы можем использовать 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
членство для любого произвольного пользователя.Я подозреваю, что такого способа не существует, потому что этот тип членства в группах определяется во время выполнения, только когда этот пользователь действительно входит в систему.