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 - неуспешно)