WedX - журнал о программировании и компьютерных науках

Active Directory: получение информации о пользователе

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

25.09.2008

Ответы:


1

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

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

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

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

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

25.09.2008
  • Только что закончил добавлять код, это в основном то, что вы сказали. Использовал DirectorySearcher и получил необходимую мне информацию. К счастью, мне нужно получить только самую основную информацию. 25.09.2008
  • для меня запись ldap в нижнем регистре вызвала исключение COMException. 24.04.2013

  • 2

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

    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));
    }
    
    25.09.2008

    3

    Очень хорошая ссылка: Как: (почти) все в Active Directory через C #

    25.09.2008
  • Я смотрел на это, но это не совсем соответствовало тому, что я искал. Хотя создайте ссылку :) 25.09.2008

  • 4

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

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

    25.09.2008

    5

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

    25.09.2008
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]