Общие сведения
Mellophone — компонент платформы КУРС, специализированно решающий задачи аутентификации, кросс-доменной аутентификации, интеграции с различиными провайдерами аутентификации.
1. Постановка задачи
Предположим, что на разных доменах (к примеру, www.domain-1.ru и www.domain-2.ru) развёрнуты разные веб-приложения.
Тот факт, что эти приложения развёрнуты на разных доменах, означает, что наборы сохраняемых браузером куков каждого из приложений индивидуальны и полностью изолированы друг от друга. То есть запрос на показ веб-страницы для приложения не будет содержать никаких данных о том, что пользователь был и авторизовывался ранее в каких-либо других приложениях.
Задача состоит в том, чтобы организовать общую авторизацию между несколькими веб-приложениями, то есть построить систему, благодаря которой пользователь, выполнивший аутентификацию в любом веб-приложении, при входе во все другие приложения также оказывался бы аутентифицирован, а при потере аутентификации в любом из приложений также переставал бы быть аутентифицированным для всех остальных приложений. За реализацию этого механизма отвечает сервер аутентификации, который может находиться на домене, отличающемся от доменов любого из приложений (к примеру, находиться в домене www.authentication-domain.ru), к нему за информацией должны обращаться как пользователь из браузера, так и напрямую взаимодействующие приложения (см. схему далее по тексту).
Для работоспособности этой схемы пользовательские браузеры должны поддерживать т. н. «сторонние куки».
2. Применяемые термины
-
В этом руководстве используется слово «аутентификация», означающее проверку «свой-чужой». Это слово следует отличать от слова «авторизация», означающее проверку, какими правами наделён «свой». Мы говорим только о системе аутентификации. Описываемая здесь система ничего не знает о ролях и правах аутентифицированного пользователя и не занимается ими.
-
Провайдером аутентификации мы будем называть систему, которая по паре «логин/пароль» может выдать ответ «свой/чужой». Mellophone поддерживает работу со следующими типами провайдеров аутентификации:
-
LDAP в одном из двух вариантов:
-
Microsoft Active Directory ,
-
Apache DS (по протоколу LDAP),
-
-
Текстовый файл в формате XML,
-
-
Общая для всех приложений сессия аутентификации имеет «идентификатор сессии аутентификации», отличный от «идентификатора сессии приложения». У каждого веб-приложения имеется свой (известный только самому этому приложению и серверу аутентификации) идентификатор сессии приложения. Он хранится в куки, выставляемой на домен приложения. Идентификатор сессии аутентификации известен только самому серверу аутентификации и хранится в стороннем куки, выставленном на домен сервера аутентификации. Одному идентификатору сессии аутентификации может соответствовать какое угодно количество идентификаторов сессий приложений. Одному идентификатору сессии приложения может соответствовать ноль, означающий, что идентификатор сессии приложения не аутентифицирован, или единица, означающая, что идентификатор сессии приложения аутентифицирован и является идентификатором активной сессии аутентификации. Таблицу соответствия между идентификаторами сессий приложения и идентификаторами активных сессий аутентификации хранит сервер аутентификации.
В некоторых случаях (для обеспечения дополнительной информационной защиты) приложению может понадобиться сменить идентификатор сессии приложения. Для отражения этого факта в Mellophone имеется специальный сервлет /changeappsesid.
3. Компоненты решения задачи
Для решения задачи применяются следующие составляющие:
-
Сервер аутентификации (Mellophone), на котором экспонированы:
-
сервлеты, обслуживающие прямые запросы с серверов веб-приложений;
-
один сервлет, обслуживающий запросы от клиентских браузеров, поступающих в виде запросов на отображение фрейма или картинки на странице веб-приложения.
-
-
Протокол, по которому любое веб-приложение может взаимодействовать с сервером аутентификации для обеспечения общей аутентификации. ##
Для использования метода /authentication.gif mellophone потребует наличия ssl сертификата для https соединнеия. Для этого можно будет либо настроить соединение на внешнем веб сервере (через который запросы проходят на mellophone), либо настроить сам mellophone (настройки tomcat для spring boot в application.yml), чтобы он использовал серитификат.
Сервлеты сервера аутентификации и протокол работы с ними
4. Сервлеты для прямых запросов с серверов веб-приложений
skinparam dpi 300 skinparam shadowing false skinparam rectangleBackgroundColor white skinparam arrowColor black skinparam noteBackgroundColor white skinparam noteBorderColor black rectangle app [ **Приложение 1** domain-1.ru ] note top of app /login?sesid=...&login=...&pwd=...&gp=... /isauthenticated?sesid=... /logout?sesid=... end note rectangle AuthServer [ **AuthServer** authentication-domain.ru ] rectangle browser [ **Пользовательский браузер** ] rectangle app2 [ **Приложение 2** domain-2.ru ] AuthServer <== app AuthServer <== app2 note top of app2 /login?sesid=...&login=...&pwd=...&gp=... /isauthenticated?sesid=... /logout?sesid=... end note app <== browser app2 <== browser AuthServer <=== browser
5. Сервлет для установки стороннего куки
5.1. Протокол работы веб-приложения с сервером аутентификации
Предполагается, что каждый запрос к веб-приложению происходит в контексте идентификатора сессии приложения. Apache Tomcat, любой другой сервлет-конейнер, PHP и многие другие системы для серверного программирования предоставляют в готовом виде механизм генерации и отслеживания идентификатора сессии приложения. Этими идентификаторами уместно пользоваться при общении с сервером аутентификации.
Если мы имеем дело с системой, которая в готовом виде не поддерживает механизм сессий приложения, то реализовать его можно таким образом:
-
При каждом запросе страницы веб-приложения пытаться читать куки с идентификатором сессии приложения. Если оно найдено, то это означает, что мы находимся в соответствующем контексте.
-
Если соответствующее куки не найдено, то идентификатор сессии приложения следует сгенерировать с помощью криптостойкого генератора случайных чисел и сохранить в куки.
Описание протокола:
-
При генерации страницы приложения по запросу пользователя сервером веб-приложения вызывается сервлет /isauthenticated?sesid=…. При положительном ответе страница приложения генерируется в зависимости от прав текущего пользователя. При отрицательном ответе формируется страница с полями для ввода логина и пароля (а куки sesid считается закрытой).
-
В любом случае страница веб-приложения должна содержать тэг:
<img src=”адрес.сервера.аутентификации/authentication.gif?sesid=...”/>
-
Страница веб-приложения с полями для ввода логина-пароля также должна содержать javascript, срабатывающий после загрузки страницы и определяющий, какой баннер загрузился. И если загрузился «цветной баннер», страница с полями логина-пароля должна перезагрузить сама себя (ибо так оказалось, что логин-пароль не нужен — в сторонних куках был идентификатор активной сессии аутентификации). Как Javascript узнает, какой баннер загрузился? Это можно сделать, например, если картинки будут отличаться по размеру на 1 пиксел. Узнать размер картинки можно с помощью кода:
var pic = document.getElementById(id); var h = pic.offsetHeight; var w = pic.offsetWidth;
-
Страница веб-приложения должна содержать кнопку разаутентификации, вызывающую ссылку: адрес.сервера.аутентификации/logout?sesid=…
Настройка Mellophone
Файл настройки config.xml находится в поддиректории config директории установки приложения. Файл содержит общие настройки приложения и перечисление настроек провайдеров аутентификации в субтэгах корневого тэга config. Пример файла config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.curs.ru/authserver config.xsd" xmlns="http://www.curs.ru/authserver">
<!-- Общие настройки -->
<common>
<threadcount>4</threadcount>
<authsessions initialCapacity="16" loadFactor="75" concurrencyLevel="16"/>
<appsessions initialCapacity="16" loadFactor="75" concurrencyLevel="16"/>
<lockouttime>10</lockouttime>
<loginattemptsallowed>5</loginattemptsallowed>
<setsettingstoken>43c42c2ee9210b0a77166a37f82bb4b6</setsettingstoken>
<getuserlisttoken>9ed41e1e40ff47208d8e0943b918a554</getuserlisttoken>
<showtimetounlockuser>true</showtimetounlockuser>
<checkpasswordhashonly>true</checkpasswordhashonly>
</common>
<!-- Провайдер LDAP ApacheDS-->
<ldapserver>
<id>test</id>
<group_providers>Группа1</group_providers>
<logging>true</logging>
<servertype>ApacheDS</servertype>
<url>ldap://localhost:10389</url>
<usessl>false</usessl>
<sat>Simple</sat>
<searchbase>ou=users,ou=system</searchbase>
<searchreturningattributes
SID="entryUUID"
login="uid"
name="cn"
email="mail"
phone="homePhone"
organization = "o"
fax = "facsimileTelephoneNumber"
/>
<searchfilterforuser>
(&(objectClass=inetOrgPerson)(uid=%s))
</searchfilterforuser>
<searchfilterforimport>
(&(objectClass=inetOrgPerson))
</searchfilterforimport>
</ldapserver>
<!-- Провайдер LDAP ActiveDirectory-->
<ldapserver>
<id>test2</id>
<group_providers>Группа1</group_providers>
<domain_name>Office</domain_name>
<logging>true</logging>
<servertype>MSActiveDirectory</servertype>
<url>ldap://srv:389</url>
<usessl>false</usessl>
<sat>DIGEST_MD5</sat>
<searchbase>CN=Builtin,DC=curs,DC=ru</searchbase>
<searchbase>CN=Users,DC=curs,DC=ru</searchbase>
<searchbase>OU=Office,DC=curs,DC=ru</searchbase>
<searchreturningattributes
SID="objectSid"
login="sAMAccountName"
name="name"
email="targetAddress"
phone="telephoneNumber"
organization = ""
fax = ""
/>
<searchfilterforuser>
(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(sAMAccountName=%s))
</searchfilterforuser>
<searchfilterforimport>
(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
</searchfilterforimport>
</ldapserver>
<!-- Провайдер XML-файл-->
<xmlfile>
<id>test3</id>
<group_providers></group_providers>
<logging>true</logging>
<url>D:/workspace/mellophone/WebContent/config/users.xml</url>
</xmlfile>
<!-- Провайдер база данных-->
<sqlserver>
<id>test4</id>
<logging>true</logging>
<url>jdbc:sqlserver://BORIS2\\SQL8R2_RUS_TEST2:1145;databaseName=showcase</url>
<connectionusername>sa</connectionusername>
<connectionpassword>F708420Dx</connectionpassword>
<table>Пользователи</table>
<fieldlogin>Логин</fieldlogin>
<fieldpassword>Пароль</fieldpassword>
<fieldblocked>Заблокированный</fieldblocked>
<hashalgorithm>SHA-256</hashalgorithm>
<localsecuritysalt>0763bdd890421f02bba7bfe8b456c69f</localsecuritysalt>
<procpostprocess>postProcess</procpostprocess>
<searchreturningattributes
SID="Поле objectSid"
login="Логин"
name="Поле name"
email="Поле email"
phone="Поле phone"
organization = ""
fax = "Поле fax"
/>
</sqlserver>
<!-- Провайдер HTTP-->
<httpserver>
<logging>true</logging>
<url>http://info.ondp2012.ru/security/</url>
<validateuser>ValidateUser</validateuser>
<userinfobyname>User/%s</userinfobyname>
<userinfobyid>User/Id/%s</userinfobyid>
</httpserver>
</config>
В этом файле могут быть заданы настройки многих провайдеров аутентификации (успешно работают установки с десятками провайдеров аутентификации типа LDAP). Для увеличения скорости работы опрос провайдеров происходит в четыре параллельных потока выполнения. Пользователь считается аутентифицированным, если хотя бы один из провайдеров успешно аутентифицировал пользователя.
Подробное описание каждого из типов провайдеров аутентификации приводится далее.
6. Общие настройки
-
threadcount - количество потоков, параллельно опрашивающих логин-провайдеры (значение по умолчанию 4),
-
sessiontimeout(целое число) - время жизни сессии в минутах. Нуль или отсутствие значения говорит о бесконечном времени жизни сессии.
-
lockouttime - время в минутах, на которое будет заблокирован пользователь после loginattemptsallowed неудачных попыток ввода пароля (значение по умолчанию 10).
-
loginattemptsallowed - количество неудачных попыток ввода пароля до блокировки пользователя (значение по умолчанию 5).
-
setsettingstoken - токен безопасности для сервлета /setsettings (значение по умолчанию null).
-
getuserlisttoken - токен безопасности для сервлета /getuserlist (значение по умолчанию null).
-
showtimetounlockuser(логическое) - показывать ли время, оставшееся до разблокировки пользователя, заблокированного по причине большого количества неудачных попыток ввода пароля.
-
checkpasswordhashonly(логическое) - настройка типа проверки пароля при логине. Если true будет проверяться только хеш пароля, если false будут проверяться и хеш пароля, и сам пароль (значение по умолчанию false).
-
настройки списков аутентификации authsessions и сессий приложений appsessions
-
initialCapacity - начальная емкость списка (значение по умолчанию 16),
-
loadFactor - используется списком для определения, когда произойдет увеличение его размера по мере заполнения (значение по умолчанию 75%),
-
concurrencyLevel - определяет количество сегментов, которое будет содержать список. Количество сегментов будет выбрано как ближайшая степень двойки, большая чем concurrencyLevel. При этом, занижение concurrencyLevel ведёт к тому, что более вероятны блокировки потоками сегментов списка при записи, завышение показателя ведёт к неэффективному использованию памяти (значение по умолчанию 16).
-
Любые (или все) из этих настроек могут быть не заданы. В таком случае будут использоваться значения по умолчанию.
7. SQL-провайдер аутентификации
7.1. Принцип работы
Этот провайдер работает с таблицей в базе данных, в полях которой хранится логин пользователя, хэшированный по SHA-1 пароль, а также дополнительная информация о пользователе, такая, как его имя, email и прочее.
Для простоты первоначальной настройки пароль можно указывать и в явном виде, после смены пароля пользователем в соответствующем поле будет храниться хэшированный пароль.
7.2. Параметры настройки в файле config.xml
Провайдер определяется тэгом sqlserver.
Параметры (субтэги):
-
id (строка) - идентификатор провайдера.
-
logging (true/false) - выводить в лог события работы провайдера.
-
group_providers (строка) - группа, к которой относится данный провайдер. Используется для ограничения множества провайдеров, в которые происходит попытка логина. Может быть пустой или отсутствовать. Конкретная группа передается в качестве параметра в сервлете логина, пользователь может иметь возможность явно выбирать группу провайдеров при подключении.
-
url (строка) - JDBC URL подключения к серверу базы данных.
-
searchreturningattributes (тэг с атрибутами) - содержит в себе указания, какие поля в записи следует интерпретировать в качестве SID, логина, электронной почты и т.п. пользователя системы. Атрибуты тэга searchreturningattributes следующие:
-
SID - SID пользователя
-
login - логин пользователя
-
name - имя пользователя
-
email - электронная почта пользователя
-
phone - телефон пользователя
-
organization - организация пользователя
-
fax - факс пользователя
-
-
connectionusername (строка) - имя пользователя, от лица которого происходит подключение к базе данных.
-
connectionpassword (строка) - пароль пользователя, от лица которого происходит подключение к базе данных.
-
table (строка) - таблица, в которой находится перечень пользователей и их хэшированных паролей.
-
fieldlogin (строка) - поле таблицы, в котором находятся имена пользователей.
-
fieldpassword (строка) - поле таблицы, в котором находятся хэшированные пароли.
-
fieldblocked (bit) - поле таблицы, в котором находится признак того, что пользователь является заблокированным. Настройка является необязательной. Значение по умолчанию false.
-
hashalgorithm (строка) - алгоритм, используемый для хэширования пароля при создании нового пароля. Возможные значения:
-
MD2
-
MD5
-
SHA-1
-
SHA-224
-
SHA-256 (значение по умолчанию)
-
SHA-384
-
SHA-512
-
-
localsecuritysalt (строка) - "локальная" (в том смысле, что не хранится в базе данных) соль, используемая при расчете хеша пароля. Повышает устойчивость системы к взлому. При этом, хеш пароля считается как HASH(password+salt+localsecuritysalt). Пароль хранится в базе в виде hashalgorithm#salt#hash
-
procpostprocess (строка) - ф-ция постобработки проверки пользователя. Возвращает результат дополнительной проверки (true/false) и сообщение, выдаваемое пользователю. Пример ф-ции для MSSQL:
CREATE PROCEDURE [dbo].[postProcess]
@sesid varchar(256),
@userlogin varchar(256),
@userauth bit,
@userattributes varchar(1024),
@userip varchar(16),
@userlocked bit,
@userloginattempts int,
@usertimetounlock int,
@message varchar(512) output
AS
BEGIN
set @message = 'Пользователь не прошел проверку в функции постобработки со следующими параметрами: '
' sesid = ' ISNULL(@sesid, '')
', userlogin = ' ISNULL(@userlogin, '')
', userauth = ' CAST(@userauth AS CHAR(1))
', userattributes = ' ISNULL(@userattributes, '')
', userip = ' ISNULL(@userip, '')
', userlocked = ' CAST(@userlocked AS CHAR(1))
', userloginattempts = ' CAST(@userloginattempts AS CHAR(16))
', usertimetounlock = ' CAST(@usertimetounlock AS CHAR(16))
RETURN 1;
END
Параметры:
-
sesid - идентификатор сессии приложения,
-
userlogin - логин пользователя,
-
userauth - авторизован ли пользователь,
-
userattributes - атрибуты пользователя (SID, телефон,…),
-
userip - ip адрес пользователя,
-
userlocked - заблокирован ли пользователь,
-
userloginattempts - число попыток авторизации пользователя,
-
usertimetounlock - время в секундах до разблокировки пользователя, если он заблокирован по причине большого числа неудачных попыток авторизации,
-
message - возвращаемое сообщение,
-
RETURN 0/1 - возвращаемый признак успешности проверки (0 - успешно, 1 - неуспешно)
HTTP-провайдер аутентификации
8. Принцип работы
Данный провайдер предполагает, что где-то реализован HTTP-сервис, содержащий в себе три сервлета:
-
валидации логина/пароля (по запросу POST данный сервис обязан принимать XML вида:
<login name="User" password="pass" xmlns="http://www.curs.ru/ns/AuthServer">
-
получения информации о пользователе по его логину
-
получения информации о пользователе по его GUID
8.1. Параметры настройки в файле config.xml
Провайдер определяется тэгом httpserver.
Параметры (субтэги):
-
logging (true/false) - выводить в лог события работы провайдера.
-
group_providers (строка) - группа, к которой относится данный провайдер. Используется для ограничения множества провайдеров, в которые происходит попытка логина. Может быть пустой или отсутствовать. Конкретная группа передается в качестве параметра в сервлете логина, пользователь может иметь возможность явно выбирать группу провайдеров при подключении.
-
url (строка) - HTTP URL подключения к сервису HTTP.
-
validateuser (строка) - имя сервлета проверки пары "логин/пароль" пользователя.
-
userinfobyname (строка) - шаблон ссылки для доступа к информации о пользователе по его логину, где подстановкой %s обозначено место для вставки имени пользователя.
-
userinfobyid (строка) - шаблон ссылки для доступа к информации о пользователе по его GUID, где подстановкой %s обозначено место для вставки GUID пользователя.
XML-файл-провайдер аутентификации
9. Принцип работы
Это — наиболее простой провайдер. Он работает с файлом XML на диске. Формат этого файла предопределён (пример см. ниже), файле хранится логин пользователя, хэшированный по SHA-1 пароль, а также дополнительная информация о пользователе, такая, как его имя, email и прочее.
Для простоты первоначальной настройки пароль можно указывать и в явном виде, после смены пароля пользователем в соответствующем атрибуте будет храниться хэшированный пароль.
<?xml version="1.0" encoding="utf-8"?>
<users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.curs.ru/authserver users.xsd" xmlns="http://www.curs.ru/authserver">
<user login="Иванов" password="пасс1"
SID="8dbf2a31-cfe6-4188-a2f0-0125481355cd" name="Алексей В. Васильев"
email="12@yandex.ru" phone="123-56-78" organization = "org1" fax = "fax1"/>
<user login="Петров" password="c8233fc18a5fd0f87284d9fa971049891315ed84"
SID="f2f0dbe5-da83-4367-9827-01e7c179ea3a" name="Борис В. Смирнов"
email="34@yandex.ru" phone="784-23-f5" organization = "org2" fax = "fax2"/>
<user login="Сидоров" password="пасс3"
SID="5e599041-6a69-466e-b22c-f3003be536d9" name="Евгений Балмасов"
email="56@yandex.ru" phone="апе-43-67" organization = "org3" fax = "fax3"/>
<user login="user111" password="pwd111"
SID="8dbf2a31-cfe6-4188-a2f0-0125481355ce" name="Алексей В. Васильев"
email="12@yandex.ru" phone="123-56-78" organization = "org4" fax = "fax4"/>
</users>
10. Параметры настройки в файле config.xml
Провайдер определяется тэгом xmlfile.
Параметры (субтэги):
-
id (строка) - идентификатор провайдера.
-
logging (true/false) - выводить в лог события работы провайдера.
-
group_providers (строка) - группа, к которой относится данный провайдер. Используется для ограничения множества провайдеров, в которые происходит попытка логина. Может быть пустой или отсутствовать. Конкретная группа передается в качестве параметра в сервлете логина, пользователь может иметь возможность явно выбирать группу провайдеров при подключении.
-
url (строка) - полный путь к XML-файлу, содержащему данные о пользователях.
11. LDAP-провайдер аутентификации
12. Принцип работы
Аутентификация по LDAP — наиболее предпочтительный для крупной организации вариант аутентификации, с её помощью можно добиться интеграции с ActiveDirectory и возможности входа пользователя под тем логином и паролем, под которым он входит в домен. Другой вариант — использование LDAP-сервера ApacheDS для хранения информации о пользователях.
Чтобы организовать аутентификацию по LDAP с ActiveDirectory, необходимо указать целый ряд параметров — адрес домен-контроллера, тип соединения, "ветки" директории, в которых будет осуществляться поиск пользователей.
Для предварительной проверки того факта, что эти опции верны, рекомендуется использовать инструмент Apache Directory Studio.
Пример задаваемого текстом списка пользователей для сервера ApacheDS:
version: 1
dn: ou=users,ou=system
objectClass: organizationalUnit
objectClass: top
ou: users
dn:: dWlkPdCh0LjQtNC+0YDQvtCyQXBhY2hlLG91PXVzZXJzLG91PXN5c3RlbQ==
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn:: 0JDQu9C10LrRgdC10Lkg0JIuINCS0LDRgdC40LvRjNC10LI=
sn:: 0JLQsNGB0LjQu9GM0LXQsg==
facsimileTelephoneNumber: 2-987-65-43
homePhone: 2-123-45-67
mail: mail2
o:: 0L7RgNCz0LDQvdC40LfQsNGG0LjRjzI=
uid:: 0KHQuNC00L7RgNC+0LJBcGFjaGU=
userPassword:: e1NIQX16Z2p4aFl6ZWM1THNlSDVKZmdjdzBiQ0VIcnc9
dn:: dWlkPdCf0LXRgtGA0L7QskFwYWNoZSxvdT11c2VycyxvdT1zeXN0ZW0=
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn:: 0JHQvtGA0LjRgSDQki4g0KHQvNC40YDQvdC+0LI=
sn:: 0KHQvNC40YDQvdC+0LI=
facsimileTelephoneNumber: 1-987-65-43
homePhone: 1-123-45-67
mail: mail1
o:: 0L7RgNCz0LDQvdC40LfQsNGG0LjRjzE=
uid:: 0J/QtdGC0YDQvtCyQXBhY2hl
userPassword:: e1NIQX15Q00vd1lwZjBQaHloTm42bHhCSmlSTVY3WVE9
13. Параметры настройки в файле config.xml
Провайдер определяется тэгом ldapserver.
Параметры (субтэги):
-
id (строка) - идентификатор провайдера.
-
logging (true/false) - выводить в лог события работы провайдера.
-
group_providers (строка) - группа, к которой относится данный провайдер. Используется для ограничения множества провайдеров, в которые происходит попытка логина. Может быть пустой или отсутствовать. Конкретная группа передается в качестве параметра в сервлете логина, пользователь может иметь возможность явно выбирать группу провайдеров при подключении.
-
servertype(MSActiveDirectory/ApacheDS) - тип LDAP-сервера: Microsoft ActiveDirectory или ApacheDS.
-
url (строка) - адрес LDAP-сервера, начиная с "ldap://" и заканчивая, после двоеточия, портом.
-
usessl (true/false) - использовать ли SSL при подключении к LDAP-серверу (пока не реализовано, нужно выставлять false).
-
sat (None/Simple/DIGEST_MD5/GSSAPI) - тип аутентификации, одно из следующих значений:
-
None - проверка имени пользователя и пароля не производится (может быть полезна, если сервер допускает анонимные соединения).
-
Simple - пароль передается в незашифрованном виде.
-
DIGEST_MD5 - пароль передается в зашифрованном виде, используя алгортим DIGEST_MD5. Замечания по поводу аутентификации при помощи DIGEST_MD5: 1.В случае AD Windows необходимо, чтобы имя пользователя было sAMAccountName 2.Критические системные объекты (например, 'Administrator') использовать нельзя 3. В случае AD Windows 2000 необходимо, чтобы на сервере было установлено "reversible password encryption enabled".
-
GSSAPI - аутентификация при помощи Kerberos.
-
-
domain_name (строка) - имя домена, связанное с данным LDAP-сервером. Опциональный параметр. В случае, если он указан, попытка логина в такой провайдер осуществляется два раза, один раз в формате "login", второй - в формате "domain_name\login".
-
searchreturningattributes (тэг с атрибутами) - содержит в себе указания, какие атрибуты LDAP-объекта следует интерпретировать в качестве SID, логина, электронной почты и т.п. пользователя системы. Атрибуты тэга searchreturningattributes следующие:
-
SID - SID пользователя
-
login - логин пользователя
-
name - имя пользователя
-
email - электронная почта пользователя
-
phone - телефон пользователя
-
organization - организация пользователя
-
fax - факс пользователя
-
-
searchbase (строка, может быть несколько) - база поиска пользователя в LDAP-дереве. Можно задать несколько баз, используя несколько тэгов searchbase.
-
searchfilterforuser - LDAP-запрос для поиска пользователя по имени, где подстановкой %s обозначено место для вставки имени пользователя.
-
searchfilterforimport - LDAP-запрос для поиска всех пользователей (для сервлета /getuserlist).