Что лучший способ состоит в том, чтобы получить список групп, которым принадлежит пользователь от сервиса окон?
List<string> groups = new List<string>();
foreach (IdentityReference ir in new WindowsIdentity(name).Groups)
{
SecurityIdentifier sid = new SecurityIdentifier(ir.Value);
NTAccount ntAccount = (NTAccount)sid.Translate(typeof(NTAccount));
groups.Add(ntAccount.ToString());
}
Я пытался использовать выше кода, но он повысил следующую ошибку.
Error communicating with client: System.Security.SecurityException: Incorrect function.
Как насчет использования запросов LDAP для работы с Active Directory?
Ниже приведен код, который я в итоге использовал. Я понятия не имел о LDAP, но, похоже, это может вызвать некоторые проблемы с безопасностью ...
public static List<string> GetUserGroups(string name)
{
List<string> groups = new List<string>();
DirectorySearcher search = new DirectorySearcher("");
int groupCount;
int counter;
string GroupName;
string DataToWriteGroups;
search.Filter = "(&(objectClass=user)(SAMAccountName=" + name + "))";
search.PropertiesToLoad.Add("memberOf");
SearchResult result = search.FindOne();
groupCount = result.Properties["memberOf"].Count;
if (groupCount > 0)
{
DataToWriteGroups = "Group(s) Belongs To User - " + name + "";
for (counter = 0; counter <= groupCount - 1; counter++)
{
GroupName = "";
GroupName = (result.Properties["memberOf"][counter].ToString());
groups.Add(GroupName);
}
}
return groups;
}