SQL-провайдер аутентификации
Принцип работы
Этот провайдер работает с таблицей в базе данных, в полях которой хранится логин пользователя, хэшированный по SHA-1 пароль, а также дополнительная информация о пользователе, такая, как его имя, email и прочее.
Для простоты первоначальной настройки пароль можно указывать и в явном виде, после смены пароля пользователем в соответствующем поле будет храниться хэшированный пароль.
Параметры настройки в файле 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 - неуспешно)