Статья опубликована в рамках: 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);.
дипломов
Оставить комментарий