Lightweight Directory Access Protocol — протокол LDAP

Содержание
  1. Как настроить клиент LDAP для подключения внешней аутентификации?
  2. Что такое Active Directory и LDAP?
  3. Что такое Active Directory?
  4. Что такое LDAP?
  5. Как Active Directory и LDAP работают вместе?
  6. Что такое аутентификация LDAP?
  7. Что такое запрос LDAP?
  8. LDAP
  9. Запрос на операции
  10. Структура
  11. Операции
  12. Протокол LDAP определён в следующих RFC:
  13. Серверная часть
  14. Клиентская часть
  15. Часть 1. Обзор LDAP
  16. Подключение к службе Active Directory и просмотр объектов
  17. Листинг 1. Список открытых портов типичного контроллера домена Windows
  18. Листинг 2. Поля стандартного объекта AD «пользователь», создаваемые по умолчанию
  19. Листинг 3. Пример запроса к LDAP-серверу
  20. Листинг 4. Пример использования ldapsearch
  21. Листинг 5. Пример использования ldapsearch
  22. Ресурсы для скачивания
  23. 5.3 Объединённая служба каталога (LDAP)
  24. Основные термины
  25. Объекты и атрибуты
  26. 2 способа настройки аутентификации LDAP Active Directory в учебном примере по безопасности Java Spring
  27. 1. Основы аутентификации LDAP
  28. 2. Аутентификация LDAP в Active Directory Spring Security
  29. 2.1 Аутентификация в Active Directory с использованием LDAP в Spring Security — пример 1
  30. 2.2 Аутентификация Active Directory с использованием LDAP в Spring Security — более простой пример
  31. 2.3 Зависимость
  32. 2.4 Ошибки при аутентификации LDAP
  33. 2.5 Инструменты
  34. 2.6 Аутентификация в Active Directory LDAP через SSL
  35. 2. 7 Что я сделал, чтобы решить проблему

Как настроить клиент LDAP для подключения внешней аутентификации?

Lightweight Directory Access Protocol  - протокол LDAP

LDAP (сокращение от Lightweight Directory Access Protocol) — это промышленный стандарт, широко используемый набор протоколов для доступа к службам каталогов.

Говоря простым языком, служба каталогов — это централизованная сетевая база данных, оптимизированная для доступа на чтение. Она хранит и предоставляет доступ к информации, которая должна быть разделена между приложениями или иметь высокую степень распространения.

Службы каталогов играют важную роль в разработке приложений для интрасети и Интернета, помогая вам обмениваться информацией о пользователях, системах, сетях, приложениях и службах по всей сети.

Типичным вариантом использования Lightweight Directory Access Protocol является централизованное хранение имен пользователей и паролей. Это позволяет различным приложениям (или службам) подключаться к серверу LDAP для проверки пользователей.

После настройки сервера LDAP вам необходимо установить библиотеки на клиенте для подключения к нему. В этой статье мы покажем, как настроить клиент LDAP для подключения к внешнему источнику аутентификации.

Я надеюсь, что у вас уже есть работающая среда сервера LDAP

Источник: https://blog.sedicomm.com/2019/10/21/kak-nastroit-klient-ldap-dlya-podklyucheniya-vneshnej-autentifikatsii/

Что такое Active Directory и LDAP?

Lightweight Directory Access Protocol  - протокол LDAP

Active Directory, который является службой каталогов играет такую важную роль в структуре ИТ-инфраструктуры большинства организаций.

Служба каталогов — это система программного обеспечения, которая хранит, организует и предоставляет доступ к информации в каталоге операционной системы компьютера.

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

Чаще всего используется для представления персонала, материальных или сетевых ресурсов.

Коротко говоря: AD — это база данных служб каталогов, а LDAP — один из протоколов, которые вы можете использовать для общения с ней. LDAP — это протокол, а Active Directory — это сервер.

Что такое Active Directory и LDAP?

Что такое Active Directory?

Active Directory — это реализация служб каталогов, которая предоставляет все виды функций, таких как аутентификация, управление группами и пользователями, администрирование политик и многое другое. Active Directory служит единым хранилищем данных для быстрого доступа к данным для всех пользователей и контролирует доступ для пользователей на основе политики безопасности каталога.

Active Directory (AD) поддерживает как Kerberos, так и LDAP — Microsoft AD на сегодняшний день является наиболее распространенной системой служб каталогов, используемой сегодня. AD обеспечивает Single-SignOn (SSO) и хорошо работает в офисе и через VPN.

AD и Kerberos не являются кроссплатформенными, что является одной из причин, по которой компании внедряют программное обеспечение для управления доступом для управления входами с разных устройств и платформ в одном месте.

AD поддерживает LDAP, что означает, что он все еще может быть частью вашей общей схемы управления доступом.

Active Directory — это только один пример службы каталогов, которая поддерживает LDAP. Также есть и другие варианты: служба каталогов Red Hat, OpenLDAP, сервер каталогов Apache и другие.

А еще Active Directory можено интегрировать с Asterisk

Что такое LDAP?

LDAP (Lightweight Directory Access Protocol) — это открытый и кроссплатформенный протокол, используемый для аутентификации служб каталогов.

LDAP позволяет приложениям взаимодействовать с другими серверами служб каталогов. Это важно, потому что службы каталогов хранят и передают важную конфиденциальную информацию, связанную с пользователями, паролями и учетными записями компьютеров.

Как Active Directory и LDAP работают вместе?

Active Directory поддерживает LDAP, что означает, что вы можете объединить их, чтобы улучшить управление доступом. Фактически, многие различные службы каталогов и решения для управления доступом могут понимать LDAP, что делает его широко используемым в средах без Active Directory.

Что такое аутентификация LDAP?

В LDAP v3 есть два варианта аутентификации LDAP — простой и SASL (Simple Authentication and Security Layer).

Простая аутентификация допускает три возможных механизма аутентификации:

  • Анонимная аутентификация: предоставляет клиенту анонимный статус для LDAP.
  • Аутентификация без аутентификации: только для целей регистрации, не должна предоставлять доступ клиенту.
  • Аутентификация по имени или паролю: Предоставляет доступ к серверу на основе предоставленных учетных данных — простая аутентификация пользователя или пароля не является безопасной и не подходит для аутентификации без защиты конфиденциальности.

Аутентификация SASL связывает сервер LDAP с другим механизмом аутентификации, таким как Kerberos. Сервер LDAP использует протокол LDAP для отправки сообщения LDAP другой службе авторизации. Это инициирует серию ответных сообщений запроса, которые приводят либо к успешной аутентификации, либо к неудачной аутентификации.

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

Что такое запрос LDAP?

Запрос LDAP — это команда, которая запрашивает у службы каталогов некоторую информацию. Например, если вы хотите увидеть, в какие группы входит конкретный пользователь, отправьте запрос, который выглядит следующим образом:

(&(objectClass=user)(sAMAccountName=yourUserName)
(memberof=CN=YourGroup,OU=Users,DC=YourDomain,DC=com))

Синтаксис не очень простой, но в официальном вики можно найти много примеров.

Источник: https://zen.yandex.ru/media/merion_networks/chto-takoe-active-directory-i-ldap-5e4d89b8cc6d233fd0f6e9c7

LDAP

Lightweight Directory Access Protocol  - протокол LDAP

2010/05/12 13:24:52

LDAP (Lightweight Directory Access Protocol — облегчённый протокол доступа к каталогам) — это сетевой протокол для доступа к службе каталогов. По сути это базы данных, хранящие в себе информацию о пользователях, узлах и объектах сети. Цель их создания — упростить администрирование.

LDAP — простой протокол, использующий TCP/IP. Он позволяет компоновать (bind), искать (search) и сравнивать (compare) записи, а также производить операции добавления, изменения или удаления. Обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP.

Для LDAP-сеансов, инкапсулированных в SSL, обычно используется порт 636.

Сессия LDAP начинается с того, что клиент подсоединяется к LDAP-серверу — по умолчанию это ТСР порт 389. клиент отправляет запрос на операцию, после чего получает ответ с сервера. В большинстве случаев клиент не должен ждать ответ перед отправкой следующего запроса, сервер же посылает ответы в произвольном порядке.

Запрос на операции

  • Старт TLS (Transport Layer Security) используя расширение LDAPv3 для обеспечения надёжного соединения.
  • Аутентификация и указание версии протокола LDAP.
  • Поиск записей в каталоге.
  • Сравнение содержит ли запись искомый атрибут.
  • Добавление новой записи.
  • Удаление записи.
  • Модификация записи.
  • Модификация отличительного имени (Distinguished Name, DN) — перемещение или переименование записи
  • Отмена предыдущего запроса.
  • Расширенные операции
  • Закрытие соединения.

Кроме того, сервер может послать не запрошенное уведомление, которое не является ответом на запрос.

Например, прежде чем разорвать соединение.

Структура

Протокол доступа к каталогам LDAP соответствует модели X.500, принятой в качестве стандарта в 1993 году:

  • Каталог представляет собой дерево каталогов записей.
  • Запись состоит из набора атрибутов.
  • Атрибут имеет имя (атрибут типа или атрибут описания) и одно или несколько значений.
  • Каждая запись имеет уникальный идентификатор — отличительное имя (Distinguished Name, DN). Которое состоит из относительного отличительного имени (Relative Distinguished Name, RDN) составленное из атрибута(ов) записи, за которым следует родительская запись отличительного имени. То есть DN является полным именем файла, а RDN относительное имя в папке.

Имейте ввиду, что DN может меняться в течение существования записи. На пример, когда запись перемещается внутри дерева каталога. Чтобы надёжно и однозначно определить позиции записи в набор её оперативных атрибутов может быть включён UUID.

В LDAP запись может выглядеть примерно так:

dn: cn=Иван Иванов,dc=example,dc=com cn: Иван Иванов givenName: Иван sn: Иванов telephoneNumber: +1 888 555 6789 telephoneNumber: +1 888 555 1232 mail: ivan@example.com manager: cn=Ася Александрова, dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top

Здесь: dn — это имя записи, которое не является не атрибутом, не частью записи. «cn=Иван Иванов» — это RDN записи, a «dc=example,dc=com» — DN родительской записи, в которой dc обозначает доменный компонент. В остальных строках показаны атрибуты записи.

Сервер хранит подкаталог (subtree) начиная с конкретной записи, например, «dc=example,dc=com» и её расширения.

На сервере также могут храниться ссылки на другие серверы, таким образом, попытка найти «ou=department,dc=example,dc=com» может вернуть предложение или постоянную ссылку на сервер, который хранит эту часть папки каталога.

Клиент может подсоединиться к этому серверу. Некоторые серверы объединены в цепи, то есть отдельный сервер связывается с другим сервером и возвращает результат клиенту.

Операции

Клиент предоставляет каждому запросу положительный идентификатор сообщения, и ответ сервера имеет тот же идентификатор сообщения.

Ответ включает в себя результирующий числовой код, который может быть успешным, указывать на ошибки или предоставлять другие данные.

Перед ответом сервер может отправить другие сообщения с другими результирующими данными — например, в этом сообщении могут быть отправлены все записи, найденные во время операции поиска.

Протокол LDAP определён в следующих RFC:

  • RFC 4510 — Lightweight Directory Access Protocol (LDAP) Technical Specification Roadmap (заменяет RFC 3377)
  • RFC 4511 — Lightweight Directory Access Protocol (LDAP): The Protocol
  • RFC 4512 — Lightweight Directory Access Protocol (LDAP): Directory Information Models
  • RFC 4513 — Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms
  • RFC 4514 — Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names
  • RFC 4515 — Lightweight Directory Access Protocol (LDAP): String Representation of Search Filters
  • RFC 4516 — Lightweight Directory Access Protocol (LDAP): Uniform Resource Locator
  • RFC 4517 — Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules
  • RFC 4518 — Lightweight Directory Access Protocol (LDAP): Internationalized String Preparation
  • RFC 4519 — Lightweight Directory Access Protocol (LDAP): Schema for User Applications
  • RFC 4520 (aka BCP 64) — Internet Assigned Numbers Authority (IANA) Considerations for the Lightweight Directory Access Protocol (LDAP) (заменяет RFC 3383)
  • RFC 4521 (aka BCP 118) — Considerations for Lightweight Directory Access Protocol (LDAP) Extension

Серверная часть

LDAP является одним из самых распространённых стандартов доступа к службам каталогов.

Из свободно распространяемых открытых реализаций наиболее популярен сервер OpenLDAP, из платных служб каталогов, которые поддерживают протокол, можно выделить Active Directory от компании Microsoft, предназначенной для централизации управления сетями Windows. Свои реализации служб каталогов, поддерживающие LDAP как протокол доступа, предлагают и другие крупные компании, например, Novell и Sun.

Клиентская часть

В качестве клиентов LDAP выступают как адресные книги почтовых клиентов, так и back-end'ы различных сетевых служб (серверы DNS, SMTP, Samba, UTS и т. д.). LDAP также получила широкую поддержку со стороны таких компаний, как:

  • Apache (на основе сервера каталогов Apache)
  • Apple (на основе Open Directory / OpenLDAP)
  • AT & T
  • Banyan
  • HP
  • IBM / Lotus
  • ISODE (через М-Vault-сервер)
  • Microsoft (с помощью Active Directory)
  • Netscape (в настоящее время в продуктах от Sun Microsystems и Red Hat)
  • Novell (через eDirectory)
  • OctetString (через сервер VDE)
  • Oracle (на основе Oracle Internet Directory)
  • Radiant Logic (через RadiantOne Virtual Directory Server)
  • Red Hat (через сервер каталоговRed Hat)
  • SiemensAG (через DirX сервер)
  • SGI
  • Sun (через сервер каталогов iPlanet и Sun ONE)
  • Symlabs (через каталог Extender)

А также в реализациях с открытым исходным кодом и в бесплатном программном обеспечении, таком, как OpenLDAP и Fedora сервер каталог. Apache HTTP Server, используемый в качестве прокси-сервера (с модулем mod_proxy) также поддерживает LDAP.

Источник: https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:LDAP

Часть 1. Обзор LDAP

Lightweight Directory Access Protocol  - протокол LDAP

Работа с данными Active Directory c помощью сценариев

Рашид Ачилов
26.06.2012 Следите за выходом новых статей этой серии.

Следите за выходом новых статей этой серии.

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

В приведенных ниже примерах используется имя домена – shelton.int, короткое имя — CATS.

Часто используемые сокращения:

  • AD – Active Directory (служба каталогов);
  • LDAP – Lightweight Directory Access Protocol (облегченный протокол доступа к каталогам);
  • DN – Distinguished Name (уникальное имя).

Подключение к службе Active Directory и просмотр объектов

Если рассматривать любой контроллер домена Windows как LDAP-сервер, то становится очевидным, что с ним можно работать стандартными средствами, предназначенными для чтения и записи данных в LDAP. Так, на нем можно обнаружить список открытых портов, похожий на приведенный в листинге 1 (из списка удалены порты, не относящиеся к LDAP):

Листинг 1. Список открытых портов типичного контроллера домена Windows

Starting Nmap 4.62 ( http://nmap.org ) at 2008-08-01 01:45 NOVSTInteresting ports on bigcat (192.168.50.

1):Not shown: 1699 closed portsPORT STATE SERVICE88/tcp open kerberos-sec389/tcp open ldap464/tcp open kpasswd5636/tcp open ldapssl3268/tcp open globalcatLDAP3269/tcp open globalcatLDAPssl

Как видно из листинга 1, контроллер домена предоставляет все необходимые сервисы: ldap на порту 389, ldap over ssl на порту 636 и т.д. В данном случае компания Microsoft не стала разрабатывать собственное решение, а воспользовалась хорошо известной и документированной службой LDAP. Правда, сама схема LDAP от Microsoft значительно отличается от существующих аналогов, так в листинге 2 приведено описание стандартного объекта «пользователь» (некоторые поля были опущены), полученное с помощью утилиты ldapsearch.

Листинг 2. Поля стандартного объекта AD «пользователь», создаваемые по умолчанию

dn: CN=LDAP Reader,CN=Users,DC=shelton,DC=intobjectClass: topobjectClass: personobjectClass: organizationalPersonobjectClass: usercn: LDAP Readersn: ReadergivenName: LDAPdistinguishedName: CN=LDAP Reader,CN=Users,DC=shelton,DC=intinstanceType: 4displayName: LDAP Readername: LDAP ReaderobjectGUID:: S2M6nZo2XkCfS2jjHt4XBg==userAccountControl: 66048badPwdCount: 0countryCode: 0badPasswordTime: 128634384464218750lastLogoff: 0lastLogon: 128634384682968750pwdLastSet: 128634383003906250primaryGroupID: 513objectSid:: AQUAAAAAAAUVAAAAtInjRe4dmI0lvJgpVwQAAA==accountExpires: 9223372036854775807logonCount: 0sAMAccountName: ldapreadsAMAccountType: 805306368userPrincipalName: ldapread@shelton.intobjectCategory: CN=Person,CN=Schema,CN=Configuration,DC=shelton,DC=int

Для просмотра и редактирования объектов, загруженных из LDAP, существуют различные программы, например, GUI-приложение ldapbrowser, написанное на Java, или ldapsearch — программа, работающая из командной строки.

Программа ldapsearch — это важный инструмент администратора LDAP-сервера, примерно как ping и traceroute для системного администратора. Она позволяет загружать и использовать практически любые данные, существующие в LDAP.

Некоторая проблема может возникнуть из-за того, что в этой программе используется собственный язык запросов. Он построен в соответствии с принципом «обратной польской записи», как в старинных программируемых калькуляторах, когда сначала задается знак операции, а потом перечисляются операнды.

Все операнды разделяются отдельными скобками, из-за чего выражения становятся очень громоздкими. Поскольку это язык запросов, то в нем присутствуют только логические операции — И (&), ИЛИ (|), НЕ (!).

Рассмотрим несколько примеров с использованием данного языка запросов.

  • (description=*) — любой объект, у которого определено поле description. При этом совершенно неважно какой будет длина этого поля, так, один символ точно так же попадет под фильтр «*», как и длинная строка.
  • (&(objectClass=user)(mail=*)) — любой объект, у которого поле objectClass равно userИ определено поле mail.
  • В листинге 3 приведен огромный запрос, используемый для загрузки глобальной адресной книги из LDAP (все содержимое запроса — это одна строка).

Листинг 3. Пример запроса к LDAP-серверу

(&(&(&(mailnickname=*)(|(&(objectCategory=person)(objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))(&(objectCategory=person) (objectClass=user)(|(homeMDB=*)(msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=contact))(objectCategory=group)(objectCategory=publicFolder)))))

Это запрос можно упросить, если воспользоваться знанием структуры каталога AD:

(&(sAMAccountName=*)(|(sAMAccountType=805306368)(sAMAccountType=268435456))(mail=*)).

В значениях sAMAccountType нет ничего секретного — это просто 0x30000000 и 0x10000000 в десятичной форме, обозначающие соответственно тип объекта «пользователь» или «контакт». Ссылку на подробное описание языка запросов можно найти в разделе «Ресурсы».

После изучения языка запросов остается решить вопрос — как подключиться к LDAP из командной строки? При этом необходимо учитывать несколько моментов.

  1. В Windows Server отсутствует так называемый anonymous bind (возможность подключения к LDAP без указания имени пользователя и пароля). Эту возможность можно активировать при наличии необходимых полномочий, но по умолчанию она отключена. Поэтому перед тем, как начать работать с LDAP через ldapsearch или создавать сценарии, необходимо получить отдельную учетную запись и установить достаточно простой пароль. Я обычно использую пароль «qwerty{123}», так как Windows 2003 Server считает его достаточно сложным, и имя пользователя ldapread. Для ldapsearch (и далее повсюду) в качестве значения параметра bind dn указывается строка @, где домен — это имя AD, переведенное в верхний регистр, например ldapread@SHELTON.INT.
  2. Что указывать в качестве исходной точки для подключения (base dn)? Обычно base dn формируется следующим образом: если AD называется shelton.int, то соответствующим значением base dn будет dc=shelton,dc=int. Если же оно называется kitten.cats.shelton.int (такие длинные имена возможны в больших инсталляциях), то соответствующим значением base dn будет dc=kitten,dc=cats,dc=shelton,dc=int. Разумеется, при подключении можно указать не корень AD, а какую-либо его ветку, например, CN=Computers,DC=shelton,DC=int, но в таком случае поиск никогда не поднимется выше ее границы. Проблема состоит в том, что логически правильным является создание организационных единиц (ou — Organizational Unit), соответствующих разным филиалам, непосредственно в корне AD, поскольку эти ou будут содержать объекты разных типов — пользователей, компьютеры, группы и т.д. Поэтому для просмотра всей структуры AD лучше указывать корневой элемент.
  3. Как в AD хранится не-ASCII информация, т.е. данные на национальных (и на русском, в том числе) языках? Подобная информация хранится в виде текста в кодировке UTF-8, преобразованного с помощью Base64 в набор символов ASCII (см. соответствующую ссылку в разделе «Ресурсы»).
  4. Сразу же после установки OpenLDAP необходимо внести в файл /usr/local/etc/openldap/ldap.conf (который может храниться и в другом месте) строку «REFERRALS off». Это необходимо сделать для всех версий AD, начиная с Windows 2003 Server.

После подготовки можно переходить к практическому использованию ldapsearch.

Листинг 4. Пример использования ldapsearch

# ldapsearch -D ldapread@SHELTON.INT -w qwerty{123} \ -LLL -h 192.168.50.

1 -b dc=shelton,dc=int -P 3 \ -a always (sAMAccountName=ld*) distinguishedName sAMAccountTypedn: CN=LDAP Reader,CN=Users,DC=shelton,DC=intsAMAccountType: 805306368

Использованные ключи имеют следующее значение:

  • -D задает значение bind dn;
  • -w — пароль для подключения;
  • -LLL обеспечивает максимальное упрощение выводимой информации;
  • -h — адрес сервера;
  • -b задает значение base dn;
  • -P — версия протокола LDAP;
  • -a описан в man ldapsearch.

Далее приводится простой фильтр отбора записей и перечень атрибутов, которые нужно вывести. Если ничего не указывать, то будут выведены все атрибуты. В данном случае мы запросили атрибуты distinguishedName и sAMAccountType.

Обратите внимание, что атрибуты, которые необходимо вывести, перечисляются через пробел, а не через запятые.

Теперь можно попробовать добавить в информацию о пользователе (средствами Microsoft) поле title, равное «Читатель» и запросить его через ldapsearch.

Листинг 5. Пример использования ldapsearch

# ldapsearch -D ldapread@SHELTON.INT -w qwerty{123} \ -LLL -h 192.168.50.

1 -b dc=shelton,dc=int -P 3 \ -a always (sAMAccountName=ld*) title sAmAccountTypedn: CN=LDAP Reader,CN=Users,DC=shelton,DC=nettitle:: 0KfQuNGC0LDRgtC10LvRjA==sAMAccountType: 805306368//проверка# echo 0KfQuNGC0LDRgtC10LvRjA== | mmencode -u | iconv -f utf-8 -t koi8-rЧитатель

В статье был представлен краткий обзор протокола LDAP и утилиты ldapsearch, использующейся для выполнения запросов к LDAP-серверам. В следующей статье мы рассмотрим использование ldapsearch из сценариев Bourne Shell.

Ресурсы для скачивания

Источник: https://www.ibm.com/developerworks/ru/library/l-active_directory_scripts_01/index.html

5.3 Объединённая служба каталога (LDAP)

Lightweight Directory Access Protocol  - протокол LDAP

Служба каталога (Directory Service) — это программный комплекс для хранения и каталогизации информации. По своей сути это очень похоже на обычную базу данных, но с «уклоном» скорее на чтение данных, нежели на их добавление или изменение. Обычно служба каталога базируется на клиент-серверной архитектуре.

Одна из наиболее известных таких систем — DNS (Domain Name Service): DNS-сервер производит взаимную «трансляцию» имён машин и их IP-адресов. Другие машины в сети могут обращаться к такому серверу за информацией о соответствии имени и адреса. Однако это очень простой пример каталогизации информации.

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

Протокол LDAP (Lightweight Directory Access Protocol) позволяет реализовать доступ по TCP/IP к службе каталогов и может легко расширяться.

Существует несколько реализаций данного протокола от различных фирм. Наиболее известные из них — Netscape Directory Service™, Novell Directory Service™ и Microsoft Active Directory™.

Из некоммерческих реализаций LDAP наибольшее распространение получил проект OpenLDAP.

Именно его мы и будем рассматривать в дальнейшем, хотя большинство понятий и определений применимо и к другим реализациям сервера LDAP.

Основные термины

Данные каталога хранятся в виде объектов или сущностей (от англ. entry), состоящих из специальных полей, называемых атрибутами (attributes). Набор атрибутов, их синтаксис и правила поиска определяются схемой каталога (scheme). Все объекты каталога идентифицируются специальным атрибутом — DN (Distinguished Name).

Данные в каталоге можно представить в виде древовидной структуры — DIT (Directory Information Tree). Это очень похоже на структуру, используемую многими файловыми системами. Вершиной такого дерева является корневой объект (Root Entry). DN корневого объекта одновременно является суффиксом каталога.

Каждый последующий объект в структуре каталога идентифицируется уникальным значением DN, который описывает путь к объекту в каталоге. Если продолжить аналогию с файловой системой, то DN любого объекта так же включает DN всех объектов стоящих выше по иерархии. Отличие в данном случае только в том, что DN формируется не слева направо, как путь к файлу, а наоборот — справа налево.

DN администратора каталога (Root Distinguished Name) — это специальный объект, описывающий администратора каталога. Этот объект указывается в конфигурации сервера, но может отсутствовать в самом каталоге. К такому объекту не применяются списки доступа (ACL). В некоторых реализациях LDAP такой объект может не иметь суффикса.

База поиска (Base Distinguished Name) — объект каталога, начиная с которого производится поиск. Дело в том, что не всегда есть необходимость производить поиск по всему дереву каталога; ограничить область поиска можно указанием в запросе базы поиска. По умолчанию этот параметр соответствует суффиксу.

Объекты и атрибуты

Серверы LDAP могут поставляться с несколькими вариантами бэкенда (backend). Например, OpenLDAP имеет такие варианты, как LDBM — собственный формат хранения данных в текстовых файлах; SHELL — интерфейс к базе данных, использующий команды UNIX; PASSWD — простейшая база, использующая стандартные файлы /etc/passwd и /etc/group; SQL — интерфейс к любой базе данных, использующей SQL.

Для процедур импорта и экспорта данных всеми серверами LDAP поддерживается единый формат обмена данными — LDIF. Вот пример такого файла с описанием двух объектов:

dn: dc=example,dc=comobjectClass: topobjectClass: organizationo: example.como: Example Inc.dn: ou=People,dc=example,dc=comobjectClass: topobjectClass: organizationalUnitou: Peopledescription: Example Inc. workersdescription: Stuff area

Описание каждого объекта в таком файле начинается с атрибута DN. Специальный атрибут objectClass указывает, к каким классам относится данный объект и, следовательно, какие атрибуты он может иметь.

В нашем случае принадлежность к классу top означает, что объект обязательно должен иметь атрибут objectClass, а принадлежность к классу organization предполагает наличие нескольких атрибутов, из которых атрибут o является обязательным.

Второй объект находится на одну ступеньку ниже по иерархии и поэтому в его DN включён DN объекта верхнего уровня. Этот объект относится к классу organizationalUnit и поэтому имеет обязательный атрибут ou.

Можно заметить, что некоторые атрибуты (для которых это применимо) могут иметь несколько значений. В данном примере атрибут description имеет два значения. А вот для атрибута dn допустимо только одно значение.

Классы, характеризующие объекты, и атрибуты, составляющие классы, описываются схемой базы. Её пример приведён ниже.

attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' )SUP name)

Источник: https://redos.red-soft.ru/base/manual/admin-manual/utilites/ldap/

2 способа настройки аутентификации LDAP Active Directory в учебном примере по безопасности Java Spring

Lightweight Directory Access Protocol  - протокол LDAP

Аутентификация LDAP является одним из самых популярных в мире механизмов аутентификации для корпоративных приложений, а Active Directory (реализация LDAP от Microsoft для Windows) — еще один широко используемый сервер LDAP.

Во многих проектах нам необходимо проходить аутентификацию в активном каталоге с использованием LDAP по учетным данным, указанным на экране входа в систему. Иногда эта простая задача усложняется из-за различных проблем, возникающих при реализации и интеграции, и из-за отсутствия стандартного способа аутентификации LDAP .

Java обеспечивает поддержку LDAP, но в этой статье я в основном буду говорить о весенней безопасности, потому что это моя любимая среда Java для аутентификации, авторизации и безопасности.

Мы можем сделать то же самое в Java, написав собственную программу для поиска LDAP, а затем связывание LDAP, но, как я сказал, это намного проще и чище, когда вы используете Spring Security для аутентификации LDAP.

Наряду с поддержкой LDAP Spring Security также предоставляет несколько других функций, которые требуются корпоративному Java-приложению, включая SSL-безопасность, шифрование паролей и средства ожидания сеанса.

1. Основы аутентификации LDAP

Прежде чем углубляться в аутентификацию LDAP в Active Directory, давайте познакомимся с некоторыми терминами LDAP, потому что большую часть времени пользователи делают это в первый раз, и они не очень знакомы с типичными глоссариями LDAP, такими как Dn, Ou, Bind или search и т. Д.

Dn — Отличительное имя , уникальное имя, которое используется для поиска пользователя на сервере LDAP, например, Microsoft Active Directory.

Ou — организационная единица
Привязка — LDAP Привязка — это операция, при которой клиенты LDAP отправляют bindRequest пользователю LDAP, включая имя пользователя и пароль, и, если сервер LDAP может найти правильные имя пользователя и пароль, он разрешает доступ к серверу LDAP.

Поиск — поиск LDAP — это операция, которая выполняется для получения Dn пользователя с использованием некоторых учетных данных пользователя.
Root — верхний элемент каталога LDAP, такой как Root of a tree.
BaseDn — ветвь в дереве LDAP, которая может использоваться в качестве базы для операции поиска LDAP, например, dc = Microsoft, dc = org ”

Если вы хотите узнать больше о LDAP, проверьте эту ссылку, там есть подробная информация о LDAP.

2. Аутентификация LDAP в Active Directory Spring Security

Существует два способа реализации аутентификации в активном каталоге с использованием протокола LDAP в Spring Spring. Первый способ — это программный и декларативный способ, который требует некоторого кодирования и некоторой конфигурации.

С другой стороны, второй способ — это готовое решение от ActireDirectoryAuthenticationProvider Security, которое просто требует настройки ActireDirectoryAuthenticationProvider и все готово. мы увидим оба подхода, но я предлагаю использовать второй, потому что он прост и удобен в использовании.

2.1 Аутентификация в Active Directory с использованием LDAP в Spring Security — пример 1

конфигурация
Добавьте следующую конфигурацию в ваш весенний файл application-context.xml, я бы предложил поместить эту конфигурацию в отдельный файл application-context-security.

XML вместе с другими элементами, связанными с безопасностью.

1) Настройка сервера LDAP
Чтобы настроить сервер LDAP, поместите следующий фрагмент XML в файл конфигурации безопасности Spring:

1

2

3

4

5

6

Эта конфигурация не требует пояснений, но в двух словах о manager-dn и пароле, аутентификации LDAP в активном каталоге или любом другом каталоге LDAP выполняется в два этапа: сначала выполняется поиск LDAP для поиска Dn (различаемого имени) пользователя и затем этот Dn используется для выполнения привязки LDAP.

Если привязка успешна, то аутентификация пользователя успешна, иначе она завершается неудачно. Некоторые люди предпочитают удаленное сравнение паролей, чем привязку LDAP , но привязка LDAP — это то, что вы в основном заканчиваете.

Большая часть Active Directory не разрешает операцию анонимного поиска, поэтому для выполнения поиска LDAP у вашей службы должна быть учетная запись LDAP, что мы и предоставили здесь manager-manager и manager-password.property.
Таким образом, теперь вход в LDAP будет выполнен с помощью следующих шагов:

  1. Ваша служба или приложение связывают себя с LDAP, используя manager-dn и manager-password.
  2. LDAP поиск для пользователя, чтобы найти UserDn
  3. Связывание LDAP с использованием UserDn

Это завершает часть входа в систему LDAP. Теперь перейдем к следующей части настройки провайдера аутентификации LDAP.

2) Настройка провайдера аутентификации LDAP
В этом разделе указаны различные провайдеры аутентификации в Spring-Security, здесь вы можете увидеть своего провайдера аутентификации LDAP, и мы используем userPrincipalName для поиска пользователей в каталоге Microsoft Active.

1

2

3

4

5

6

7

8

9

Теперь для передачи userPrincipalName и аутентификации пользователя требуется небольшой фрагмент кода.

01

02

03

04

05

06

07

08

09

10

public boolean login(String username, String password) {

   AndFilter filter = new AndFilter();

   ldapTemplate.setIgnorePartialResultException(true);

   Directory doesn’t transparently handle referrals. This fixes that.

   filter.and(new EqualsFilter(«userPrincipalName», username));

   return ldapTemplate.authenticate(«dc=stockmarketindia,dc=trader»,

             filter.toString(), password);

}

Строка 2 очень важна в этой программе, потому что я потратил целый день на выяснение того, когда мое приложение неоднократно генерировало javax.naming.PartialResultException: необработанные ссылки на продолжение. Вы также можете использовать sAMAccountName для пользователя, userPrincipalName поиск, оба userPrincipalName и sAMAccountName уникальны. в Active Directory.

Здесь самое важное то, что это должно быть полное имя, например name @ domain, например jimmy@stockmarket.com.

Метод authenticate() вернет true или false в зависимости от результата операции связывания.

2.2 Аутентификация Active Directory с использованием LDAP в Spring Security — более простой пример

Второй подход намного проще и понятнее, поскольку он поставляется «из коробки», вам просто нужно настроить URL-адрес и доменное имя сервера LDAP, и он будет работать как кремовый.

01

02

03

04

05

06

07

08

09

10

    //your domain

    //ldap url

Вот и все, сделано. Эта конфигурация будет аутентифицировать и загружать все предоставленные права доступа из LDAP, например, группу, членом которой вы являетесь. Это также интегрировано с пружинным элементом входа в систему безопасности.

2.3 Зависимость

Этот пример основан на Spring Security 3.0, и я использовал Spring-ldap-1.3.1.RELEASE-all.jar и spring-security-ldap-3.1.0.RC3.jar.

Если вы не знаете, как загрузить JAR-файлы Spring Framework , выполните действия, описанные в этом руководстве по загрузке JAR Spring Framework , в котором объясняется, как загрузить Spring Framework и другие связанные JAR-файлы из Maven Central.

2.4 Ошибки при аутентификации LDAP

Вам очень повезло завершить аутентификацию LDAP по Active Directory без каких-либо ошибок или исключений, здесь я перечисляю некоторые распространенные ошибки, с которыми я столкнулся, и их решения для быстрого ознакомления.
1) javax.naming.

PartialResultException: необработанные ссылки на продолжение;оставшееся имя ‘dc = компания, dc = com’
Эта ошибка возникает из-за того, что Microsoft Active Directory не обрабатывает рефералы должным образом, и для исправления этого набора установите это свойство

1

ldapTemplate.setIgnorePartialResultException(true);

2) javax.naming.NameNotFoundException: [LDAP: код ошибки 32 — Нет такого объекта];оставшееся имя »
Эта ошибка решена с помощью проб и ошибок и, в основном, произошла из-за неверного формата имени пользователя . это решается путем предоставления полного имени, например, jemmy@stockmarket.com

2.5 Инструменты

Браузер LDAP : Наличие некоторых инструментов для просмотра данных в каталоге LDAP лучше всего дает некоторую наглядность, а также позволяет просматривать данные в LDAP.

Он называется браузером LDAP, и в Интернете доступно множество браузеров LDAP с открытым исходным кодом, например, jexplorer. Вы можете просматривать и просматривать данные в Active Directory с помощью браузера LDAP.

2.6 Аутентификация в Active Directory LDAP через SSL

Это прекрасно работает для реализации аутентификации LDAP по активному каталогу Microsoft. но одна вещь, на которую вы могли бы обратить внимание, — это когда имя пользователя и пароль LDAP передаются на сервер LDAP в виде открытого текста, и любой, кто имеет доступ к трафику LDAP, может прослушивать учетные данные пользователя, поэтому это небезопасно.

Одним из решений является использование протокола LDAP (LDAP over SSL), который будет шифровать трафик, проходящий между клиентом и сервером LDAP.

В Spring -Security это легко сделать, и вам нужно изменить URL-адрес вместо « ldap: //stockmarket.com/ », который необходимо использовать «» ldaps: //stockmarket.com/ «. на самом деле, порт для LDAP — 339, а для LDAPS — 636, но к весне это было решено во втором подходе, при первом подходе вам необходимо предоставить эту информацию.

С какой проблемой вы можете столкнуться — «не может найти действительный путь сертификации к запрошенной цели»

Исключение, как показано ниже:

1

2

3

4

javax.net.ssl.SSLHandshakeException:

sun.security.validator.ValidatorException: PKIX path building failed:

sun.security.provider.certpath.SunCertPathBuilderException:

    unable to find valid certification path to requested target

Причина этого исключения проста: возврат сертификатов во время рукопожатия SSL не подписан никаким доверенным центром сертификации (CA), который настроен в вашем наборе ключей JRE, например, Verisign, Thwate, GoDaddy или entrust и т. Д. Вместо этого сервер отправляет сертификат, который не известно JRE.

Для решения этой проблемы вам необходимо добавить сертификаты, возвращенные сервером, в хранилище ключей JRE. Кстати, если вы запутались между хранилищем ключей и доверенным хранилищем, пожалуйста, прочитайте мою статью о различиях между хранилищем ключей и доверенным хранилищем в Java, чтобы сначала узнать об этом.

2. 7 Что я сделал, чтобы решить проблему

Ничего удивительного, я использую программу с открытым исходным кодом InstallCert.java, просто запускаю ее с вашим сервером LDAP и портом, и она будет пытаться подключиться к серверу LDAP с использованием SSL и сначала выдать тот же « Ошибка построения пути PKIX», а затем сертификаты, возвращенные сервером LDAP.

Затем вам будет предложено добавить сертификат в хранилище ключей, просто укажите номер сертификата, который появился на вашем экране, а затем он добавит этот сертификат в « jssecacerts » в папкеC: \ Program Files \ Java \ jdk1.6.0 \ jre \ lib \ security . Теперь перезапустите программу, эта ошибка должна исчезнуть, и она напечатает:

1

2

3

4

5

6

7

«Loading KeyStore jssecacerts…

Opening connection to stockmarket.com:636…

Starting SSL handshake…

No errors, the certificate is already trusted

Мы закончили, теперь, если вы попробуете аутентифицироваться на LDAPS, у вас все получится.

Существует много других подходов для выполнения аутентификации LDAP по активному каталогу даже без использования пружинной безопасности с использованием Java.

но я считаю Spring-Security очень полезной, так что подумайте о том, чтобы использовать ее для своих требований безопасности.

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

Источник: https://coderlessons.com/articles/java/2-sposoba-nastroiki-autentifikatsii-ldap-active-directory-v-uchebnom-primere-po-bezopasnosti-java-spring

Все термины
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: