Да, но некоторые методы зависят от наличия домена.
См. страницу , чтобы узнать, как преобразовать SID
для идентификатора пользователя с помощью P / Invoke и Windows API или с .NET 2.0+ и без P / Invoke.
с использованием System.Security.Principal;
// преобразовать sid пользователя в домен \ имя
строка account = новый SecurityIdentifier (stringSid) .Translate (typeof (NTAccount)). ToString ();
Если у вас есть AD и
там идентификатор пользователя, затем используйте DirectorySearcher
метод или API управления учетной записью для поиска групп.
В противном случае используйте метод, изложенный в
эта статья, чтобы получить местный
групп.
- Теперь используйте API, предложенный @tvanfosson для итерации групп и получения идентификаторов безопасности. Или следуйте указаниям ниже.
В приложении ASP.NET можно использовать подобный код для доступа к информации о группе, если пользователь проходит проверку подлинности Windows, а не проверку подлинности с помощью форм. В этом примере я оставил интересную заметку об исключениях, которые генерируются в этой среде, но это может относиться к другим пользователям:
public List<string> GetGroupsFromLogonUserIdentity()
{
List<string> groups = new List<string>();
HttpRequest request = HttpContext.Current.Request;
if (request.LogonUserIdentity.Groups != null)
{
foreach (IdentityReference group in request.LogonUserIdentity.Groups)
{
try
{
groups.Add(group.Translate(typeof(NTAccount)).ToString());
}
catch (IdentityNotMappedException)
{
// Swallow these exceptions without throwing an error. They are
// the result of dead objects in AD which are associated with
// user accounts. In this application users may have a group
// name associated with their AD profile which cannot be
// resolved in the Active Directory.
}
}
}
return groups;
}
LogonUserIdentity основан на WindowsIdentity классе. Вы можете изменить мой пример кода для использования WindowsIdentity и функции в не-веб-приложении. После того, как вы выполните итерацию по группе, вы сможете сделать что-то подобное, чтобы получить SecurityIdentifier:
SecurityIdentifier secid = group as SecurityIdentifier;