Статья опубликована в рамках: LII Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 06 сентября 2018 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
РАЗРАБОТКА ИНТЕГРАЦИОННОГО РЕШЕНИЯ СИНХРОНИЗАЦИИ УЧЕТНЫХ ЗАПИСЕЙ ПОЛЬЗОВАТЕЛЕЙ ACTIVE DIRECTORY
Зачастую в рамках реализации той или иной корпоративной информационной системы (сокращенно КИС) возникает необходимость каким-то образом внедрять разрабатываемое решение в уже существующую инфраструктуру предприятия, ведь на предприятии почти всегда есть некоторые выделенные локальные вычислительные сети, например, для сотрудников отдела бухгалтерии, некоторое программное обеспечение, с помощью которого персонал выполняет свои непосредственные обязанности – системы электронного документооборота, вычислительные математические и офисные пакеты. Кроме всего прочего в ИТ – инфраструктуре предприятия почтив всегда имеет место быть система администрирования рабочих станций, которая позволяет проводить комплексную их настройку, переустановку программного обеспечения и т.д. Также в задачи системы администрирования входит разделение прав доступа к тем или иным ресурсам в вычислительной сети предприятия: например, совсем ни к чему давать доступ секретариату к рабочим документам бухгалтерии. Одним из таких решений является Active Directory от компании Майкрософт.
Active Directory (AD, активный каталог) это служба каталогов, разработанная для ОС семейства Windows Server. С помощью AD можно решить следующие задачи, возникающие при создании ИТ-инфраструктуры:
- Обеспечение единообразия рабочих сред пользователей через механизм групповых политик;
- Централизованная установка обновления операционной системы;
- Централизованное хранение настроек пользователей;
- Разграничение прав доступа через тот же механизм групповых политик.
Изначально данная служба каталогов не предполагала интеграций со сторонними сервисами, это стало возможно только после выхода Windows Server 2008. В этот же момент стали разрабатываться и соответствующие интеграционные решения, которые в большинстве своем сводятся к синхронизации учетных записей пользователей, некоторых служебных данных (информация о блокировке и адресе электронной почты, например). По ходу данной статьи будет разобрана реализация программы для синхронизации пользователей между Active Directory (по сути – хранилищем пользователей внутри организации) и некой сторонней системой.
Разберем основные понятия Active Directory с точки зрения разработки подобных интеграционных решений. Ключевые определения сведены в Таблицу 1.
Таблица 1.
| Наименование атрибута | Название на английском языке | Название на русском языке | Пример | 
| В рамках сущности Департамент (OU - Organizational Unit) | |||
| distinguishedName | Distinguished Name | Отличительное (уникальное) имя | OU=Organization | 
| name | Name | Наименование | Организация | 
| В рамках сущности Группа (Group) | |||
| distinguishedName | Distinguished Name | Отличительное (уникальное) имя | CN=Group,OU= Organization | 
| name | Name | Наименование | Группа_1 | 
| member | Members | Коллекция членов группы | CN=Иванов Иван Иванович,OU= Organization | 
| В рамках сущности пользователь (User) | |||
| DN | Distinguished Name | Отличительное (уникальное) имя | CN=Сергей Петрович Иванов,OU=Компания,DC=domain,DC=com | 
| DC | Domain Component | Компонент(класс) доменного имени. | DC=domain,DC=com | 
| OU | Organizational Unit | Подразделение | Компания | 
| CN | Common Name | Общее имя | Сергей Петрович Иванов | 
| givenName | First name | Имя | Сергей Петрович | 
| name | Full name | Полное имя | Сергей Петрович Иванов | 
| sn (SurName) | Last name | Фамилия | Иванов | 
| displayName | Display Name | Выводимое имя | Сергей Петрович Иванов | 
|  |  | Электронная почта | 
 | 
| sAMAccountName | User logon name (pre-Windows 2000) | Имя входа пользователя (до Windows 2000) | IvanovSP | 
| userPrincipalName | User logon name | Имя входа пользователя | 
 | 
| memberOf | Member Of | Член групп | CN=Группа,OU=Компания,DC=domain,DC=com | 
Таблица специально приведена с формулировками на английском языке, так как большинство литературы по Active Directory и технологиям компании Майкрософт в целом издается на английском языке.
Стоит отметить, что два таких параметра как userPrincipalName и sAMAccountName являются похожими – второй является частью первого. Но не смотря на это в программных реализациях следует использовать userPrincipalName, так как sAMAccountName является устаревшим и на его основе функционал AD не расширяется, таким образом, вы рискуете остаться без возможности расширить вашу интеграцию в будущем.
Перейдем к программной реализации на языке C#. Этот язык был выбран не случайно: за его разработкой стоит та же корпорация Майкрософт, что гарантирует отличную доступность Active Directory с помощью подключаемых библиотек System.DirectoryServices, System.DirectoryServices.AccountManagement, System.DirectoryServices.ActiveDirectory.
Выделим специальный класс, который будет служить провайдером к AD и будет доступен для вызова из других методов – ActiveDirectoryHelper.cs. Содержание данного класса раскрыто на Рисунке 1.

Рисунок 1. Программный код класса ActiveDirectoryHelper.cs
Приведем некоторые пояснения к данному программному коду, несмотря на то, что код содержит комментарии.
В первую очередь необходимо открыть PrincipalContext – некоторый провайдер к сущностям Active Directory. Разумеется, чтобы иметь такой доступ, нужна учетная запись администратора, логин и пароль которого необходимо прописывать при открытии контекста. Конечно, жестко указывать логин и пароль в исходном коде – дурная затея, лучше создать отдельный модуль с графическим интерфейсом, в котором будут поля для ввода логина и пароля администратора и условная кнопка «Синхронизировать пользователей».
Далее мы настраиваем фильтр, создавая сущность класса UserPrincipal. Это нужно для того, чтобы отсеять остальные сущности в AD – grop, machine и другие. Далее ищем все сущности, удовлетворяющие данному фильтру методом FindAll(), который вызывается у экземпляра класса PrincipalSearcher.
Теперь в памяти сохранен список сущностей, которые формально числятся как пользователи. Далее необходимо получить из них информацию.
Но перед этим необходимо убедиться, что сущность, которая числится как пользователь действительно таковой является: для этого выполним поиск среди экземпляров класса UserPrincipal по идентификатору GUID, и если результат этого поиска будет null (то есть среди UserPrincipal) не числится данной сущности, то синхронизировать ее не нужно, а нужно пропустить ее оператором continue.
Далее разбираются данные пользователя: логин, емейл, номер телефона, информация о блокировке в AD.
И в последних строчках кода происходит непосредственная синхронизация: если данный пользователь же есть в нашей системе хранения, то добавлять его не нужно, необходимо только обновить его поля. И, напротив, если пользователя с таким логином в нашей системе еще не существует, его необходимо создать с нужным набором полей.
Доступа к паролям Active Directory не предоставляет из соображений информационной безопасности.
Список литературы:
- Библиотека классов C# [Электронный ресурс], Режим доступа: https://msdn.microsoft.com/ru-ru/library/mt472912(v=vs.110).aspx (дата обращения: 04.09.2018).
- Рэст Д., Рэст Н., Холм Д. Настройка Active Directory. Windows Server 2008. 1-е изд., М.: Русская Редакция-М, 2009. — 960 с.
- Справочник по C#. [Электронный ресурс]. Режим доступа: https://msdn.microsoft.com/library/edakx9da(v=vs.100).aspx/ (дата обращения: 04.09.2018);.
дипломов


Оставить комментарий