Active Directory: получить информацию о пользователе - PullRequest
10 голосов
/ 25 сентября 2008

У меня есть веб-приложение, которое работает с проверкой подлинности Windows с использованием нашей Active Directory. У меня есть новое требование для извлечения личной информации из записи Active Directory. Какой самый простой способ получить доступ к этой информации?

Ответы [ 5 ]

17 голосов
/ 25 сентября 2008

Доступ к пользователю напрямую через DirectoryEntry кажется наиболее простым подходом. Вот некоторые нюансы, связанные с AD, которые я узнал из своего первого проекта, связанного с AD:

  • В URI напишите LDAP строчными буквами. В противном случае вы получите загадочную ошибку. Я потратил больше дня на эту удручающую проблему ...
  • Чтобы очистить однозначное свойство, установите для него пустую строку, а не нуль. Ноль вызывает исключение.
  • Чтобы очистить многозначное свойство, используйте метод DirectoryEntry.Property.Clear () .
  • В ссылке на схему Active Directory будет указано, каким типом данных будет значение и является ли оно многозначным или однозначным.
  • Вам не нужно вручную RefreshCache () для объекта каталога, но если вы когда-либо будете использовать его и указать, какие свойства следует кэшировать, знайте, что в будущем он не будет автоматически извлекать другие свойства.
  • Исключение COMException может создаваться в любое время, когда вы используете классы в System.DirectoryServices. Следите за этими пробными блоками. Не думайте, что что-то безопасно.

Вам, вероятно, понадобится использовать DirectorySearcher, чтобы получить запись каталога вашего пользователя, если вы не знаете его путь (чего вы не знали бы, просто войдя в него). Использовать его было довольно просто, но остерегайтесь причуд в синтаксисе LDAP; а именно, необходимость кодировать не-ASCII (и другие?) символы. Строка поиска, которую вы будете использовать, вероятно, будет выглядеть примерно так: (& (sAMAccountName = что угодно) (class = user)) . Это от макушки головы и может быть немного неправильным.

Будет полезна ссылка на схему Active Directory . Поймите, что схема может быть изменена и расширена (например, установка Exchange добавит пользователям информацию о почтовом ящике).

AD Explorer - это полезный инструмент, который можно использовать для отладки и низкоуровневого управления данными AD. Я нашел это полезным, когда я знаю, какое свойство я хочу установить, но не могу найти правильное диалоговое окно в инструменте управления AD.

5 голосов
/ 25 сентября 2008
5 голосов
/ 25 сентября 2008

Вы можете найти следующий фрагмент кода полезным для начала.

public static bool IsUserInGroup(string lanid, string group)
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
    if(entry != null)
    {
        entry.Username=@"LDAPUSER";
        entry.Password="LDAPPASSWORD";
        DirectorySearcher srch = new DirectorySearcher(entry);
        srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid);
        srch.PropertiesToLoad.Add("memberOf");

        SearchResult result = srch.FindOne();
        if(result != null)
        {
            if(result.Properties.Contains("memberOf"))
            {
                string lookfor = String.Format("cn={0},", group.ToLower());
                foreach(string memberOf in result.Properties["memberOf"])
                {
                    if(memberOf.ToLower().StartsWith(lookfor))
                        return true;
                }
            }
        }
        return false;
    }
    throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}",   lanid, group));
}
1 голос
/ 25 сентября 2008

Взгляните на пространство имен System.DirectoryServices:

Пространство имен System.DirectoryServices

0 голосов
/ 25 сентября 2008

Я использовал стандартную библиотеку LDAP для получения информации с сервера Active Directory, но вам нужно убедиться, что необходимые вам данные доступны через схему сервера LDAP. В общем, вы можете получить любую информацию, хранящуюся в InetOrganizationalPerson, и большую часть информации, относящейся к группе (группам), к которой они принадлежат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...