Impersonation exampleКак проверить, не является ли пользователь с [UserName] и [Password] администратором домена [DomainName] без олицетворения?
я могу проверить, является администратором домена пользователя со следующими строками кода:
using (Impersonation im = new Impersonation(UserName, Domain, Password))
{
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
bool isDomainAdmin = identity.IsDomainAdmin(Domain, UserName, Password);
if (!isDomainAdmin)
{
//deny access, for example
}
}
где IsDomainAdmin - это метод расширения
public static bool IsDomainAdmin(this WindowsIdentity identity, string domain, string userName, string password)
{
Domain d = Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain, domain, userName, password));
using (DirectoryEntry de = d.GetDirectoryEntry())
{
byte[] domainSIdArray = (byte[])de.Properties["objectSid"].Value;
SecurityIdentifier domainSId = new SecurityIdentifier(domainSIdArray, 0);
SecurityIdentifier domainAdminsSId = new SecurityIdentifier(WellKnownSidType.AccountDomainAdminsSid, domainSId);
WindowsPrincipal wp = new WindowsPrincipal(identity);
return wp.IsInRole(domainAdminsSId);
}
}
Но, когда метод IsDomainAdmin называется, оно пытаясь записать некоторые файлы в% LOCALAPPDATA% для олицетворенного пользователя, и если программа запущена не как администратор, она выдает исключение
Не удалось загрузить файл или сборку 'System.DirectoryServices, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b03f5f7f11d50a3a' или один из его зависимостей. Либо требуемый уровень олицетворения не был указан , либо предоставленный уровень олицетворения недействителен. (Исключение из HRESULT: 0x80070542)
Полезная http://stackoverflow.com/questions/12160262/how- can-i-define-if-a-windows-identity-to-a-local-or-a-domain-use – Kiquenet