Это может помочь. Мне нужно было разработать приложение, в котором мы хотим проходить аутентификацию в активном каталоге, а также изучить строки групп, в которых находится пользователь.
По нескольким причинам мы не хотим использовать проверку подлинности Windows, а имеем собственную проверку подлинности на основе форм. Я разработал подпрограмму ниже, чтобы, во-первых, аутентифицировать пользователя, а во-вторых, изучить все группы, к которым принадлежит пользователь. Возможно, это может помочь. Процедура использует LogonUser для аутентификации, а затем получает список числовых идентификаторов групп (SID), похожих на guid для этого пользователя, и переводит каждый из них в удобочитаемую форму.
Надеюсь, это поможет, мне пришлось синтезировать этот подход из множества различных поисковых запросов Google.
private int validateUserActiveDirectory()
{
IntPtr token = IntPtr.Zero;
int DBgroupLevel = 0;
// make sure you're yourself -- recommended at msdn http://support.microsoft.com/kb/248187
RevertToSelf();
if (LogonUser(txtUserName.Value, propDomain, txtUserPass.Text, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, token) != 0) {
// ImpersonateLoggedOnUser not required for us -- we are not doing impersonated stuff, but leave it here for completeness.
//ImpersonateLoggedOnUser(token);
// do impersonated stuff
// end impersonated stuff
// ensure that we are the original user
CloseHandle(token);
RevertToSelf();
System.Security.Principal.IdentityReferenceCollection groups = Context.Request.LogonUserIdentity.Groups;
IdentityReference translatedGroup = default(IdentityReference);
foreach (IdentityReference g in groups) {
translatedGroup = g.Translate(typeof(NTAccount));
if (translatedGroup.Value.ToLower().Contains("desired group")) {
inDBGroup = true;
return 1;
}
}
}
else {
return 0;
}
}