Как получить группы пользователей AD для user in Asp.Net?
-
01-07-2019 - |
Вопрос
Мне нужно иметь возможность получить список групп, в которых находится пользователь, но мне нужно, чтобы было видно одно / некоторые / все следующие свойства:
- различимое имя
- Имя
- cn
- имя пользователя samaccountname
То, что у меня есть прямо сейчас, возвращает какое-то имя, но не какое-либо из приведенных выше (имена кажутся близкими, но не все совпадают правильно.Это то, что я использую:
ArrayList groups = new ArrayList();
foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
groups.Add(group.Translate(typeof(System.Security.Principal.NTAccount)));
Как я уже сказал, вышеприведенное работает, но не даст мне правильных имен, которые мне нужны для моей программы (тех, что указаны выше).Мне нужно, чтобы это соответствовало списку, который я получаю при вызове всех групп в моем домене:
DirectoryEntry dirEnt = new DirectoryEntry("LDAP://my_domain_controller");
DirectorySearcher srch = new DirectorySearcher(dirEnt);
srch.Filter = "(objectClass=Group)";
var results = srch.FindAll();
Решение
Вы не можете сделать это за один шаг, так как группы также представляют собой отдельные записи объявлений со свойствами.
Итак, при первом запуске вы должны получить имена групп, в которых состоит пользователь, и занести их в какой-нибудь список.
Второй шаг - просмотреть все имена групп и запросить их одно за другим, чтобы получить свойства группы (например, distinguishedname и так далее) и собрать их в какую-то структуру.