Модуль сервера SER - Auth_DB


Назначение

Этот модуль содержит все необходимые функции для работы авторизации с использованием доступа к базам данных. Он должен использоваться совместно с модулем auth, и не может использоваться отдельно, так как содержит зависимости от этого модуля. Используйте этот модуль, если Вы хотите для хранения авторизационной информации (имена пользователей и пароли регистрирующихся на сервере клиентов и т.д.) воспользоваться базами данных.
Если Вы хотите использовать вместо базы данных для авторизации - сервер radius, тогда вместо этого модуля используйте - auth_radius.


Зависимости от других модулей.


Этот модуль имеет зависимости от следующих модулей (другими словами, ниже перечисленные модули должны быть загружены до загрузки этого модуля):

1. auth - основной модуль авторизации.
2. database - любой из модулей для интерфейса с конкретной базой данных (на данный момент: mysql, postgres, dbtext)


Зависимости от внешних библиотек и приложений.


Следующие библиотеки или приложения должны быть установлены перед использованием OpenSER с этим модулем:

Нет.


Экспортируемые параметры.


db_url (string)

string - это URL для доступа к используемой базе данных. Значение параметра зависит от используемого модуля доступа к базы данных. Например, для mysql и postgres - этот параметр выглядит примерно так: "mysql: // username:password@host:port/database." Для модуля dbtext (который хранит данные в обычных текстовых файлах) - значение является именем каталога, в котором создаются файлы с данными.

Значение по умолчанию: "mysql://openserro:openserro@localhost/openser".

Пример использования параметра db_url:
modparam("auth_db", "db_url", "mysql://foo:bar@foobar.org/openser")


user_column (string)

string - это название столбца, который содержит имена пользователей. Значение по умолчанию обычно подходит для большинства случаев. Указывайте этот параметр, если Вам действительно нужно изменить название этого столбца.

Значение по умолчанию: "username".

Пример использования параметра user_column:
modparam("auth_db", "user_column", "user")


domain_column (string)

string - это название столбца, который содержит имя домена пользователя. Значение по умолчанию обычно подходит для большинства случаев. Указывайте этот параметр, если Вам действительно нужно изменить название этого столбца.

Значение по умолчанию: "domain".

Пример использования параметра domain_column:
modparam("auth_db", "domain_column", "domain")


password_column (string)

string - это название столбца, который содержит пароль. Пароль может храниться в "чистом" виде или в виде предварительно рассчитанной HA1 строки. HA1 строка - это MD5 хеш рассчитанный на основе полей "username", "password" и "realm".
Использование HA1 более безопасно, т.к. на сервере не хранятся пароли в "чистом" виде и даже, если злоумышленник получит к ним доступ, то получить пароли пользователей из MD5 хеша ему будет довольно проблематично.

Значение по умолчанию: "ha1".

Пример использования параметра password_column:
modparam("auth_db", "password_column", "password")


password_column_2 (string)

Как было описано для предыдущего параметра, тут указывается название столбца, который содержит предварительно подготовленную HA1 строку, которая рассчитывается с учетом того, что в имени пользователя содержится доменная часть (user@domain). Этот параметр используется только тогда, когда значение calculate_ha1 установлено в 0 и пользовательский агент использует при авторизации имя пользователя с доменной частью.

Значение по умолчанию: ha1b.

Пример использования параметра password_column_2:
modparam("auth_db", "password_column_2", "ha1_2")


calculate_ha1 (integer)

Этот параметр указывает серверу, используется ли "чистый" пароль в базе данных или подготовленная HA1 строка. Если значение параметра установлено в 1, то сервер будет полагать, что в столбце, который задан параметром password_column, содержиться пароль в "чистом" виде, это заставит сервер вычислить HA1 строку на лету при ее необходимости.

Если значение этого параметра установлено в 0, тогда сервер будет полагать, что в базе содержится уже подготовленная HA1 строка, и он не будет ее рассчитывать на лету. Если при авторизации используется имя пользователя, которое также содержит поле @domain (некоторые пользовательские агенты добавляют имя домена в поле имени пользователя), то будет использоваться HA1 строка из столбца, имя которого задано параметром password_column_2. Этот столбец также должен содержать HA1 строку, но она должна быть рассчитана исходя из того, что в имя пользователя включено имя домена (В отличие от столбца указанного в параметре password_column, который (при хранении HA1 строки) всегда должен содержать HA1 строку, которая рассчитывается без доменной части в имени пользователя).

Это гарантируется, что авторизация будет работать всегда при использовании предварительно рассчитанной HA1 строки, вне зависимости от присутствия доменной части в имени пользователя (@domain).

Значение по умолчанию: 0.

Пример использования параметра calculate_ha1:
modparam("auth_db", "calculate_ha1", 1)


use_domain (integer)

Если установлено в true (не равно 0), то при поиске в таблице подписчиков также будет использоваться и имя домена. Если у Вас используется многодоменная конфигурация, то настоятельно рекомендуется включить эту функциональность, чтобы избежать перекрытия одинаковых имен пользователей, у которых различная доменная часть.

ВАЖНО: перед включением этого параметра, убедитесь, что столбец, который содержит в себе имена доменов, заполнен должным образом в таблице подписчиков.

Значение по умолчанию: "0 (false)".

Пример использования параметра use_domain:
modparam("auth_db", "use_domain", 1)


load_credentials (string)

Этот параметр определяет credential который будет извлечен из базы данных, при выполнении авторизации. Полученный credential будет сохранен в AVP. Если имя для AVP не задано, то для задания имени AVP будет использовано такое же имя, как и у названия столбца таблицы.

Синтаксис параметра:

load_credentials = credential (';' credential)*

credential = (avp_specification '=' column_name) | (column_name)

avp_specification = '$avp(' + 'i:'ID | 's:'NAME | alias + ')'


Значение по умолчанию: "rpid".

Пример использования параметра load_credentials:

  1. load rpid column into $avp(i:13) and email_address column
  2. into $avp(s:email_address)
modparam("auth_db", "load_credentials", "$avp(i:13)=rpid;email_address")


Экспортируемые функции.


www_authorize(realm, table)

Функция проверяет представленные пользовательским агентом данные для авторизации согласно RFC2617. Если эти данные успешно пройдут проверку, тогда функция успешно закончит свою работу и отметит эти данные, как успешно проверенные (успешно проверенные представленные пользователем данные авторизации могут далее использоваться некоторыми другими функциями). Если эта функция не может проверить представленные данные по каким-либо причинам, то она возвратит ошибку, и дальнейший сценарий должен вызвать функцию www_challenge(), которая заново начнет процесс авторизации пользователя.

Значения для параметров следующие:

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

Если используется пустая строка "", тогда сервер сам сгенерирует ее на основании полученного запроса. В случае сообщения REGISTER будет использоваться доменная часть из заголовочного поля "To" (потому что это поле определяет пользователя, который хочет зарегистрироваться), в случае всех других SIP сообщений использоваться доменная часть из заголовочного поля "From".

Строки могут содержать псевдопеременные.

  • table - Таблица, которая используется для проверки имен пользователей и паролей (обычно - это таблица подписчиков).

Эта функция может использоваться из блока REQUEST_ROUTE.

Пример использования функции www_authorize():

...
if (www_authorize("siphub.net", "subscriber")) {
www_challenge("siphub.net", "1");
};
...


proxy_authorize(realm, table)

Функция проверяет представленные пользовательским агентом данные для авторизации согласно RFC2617. Если эти данные успешно пройдут проверку, тогда функция успешно закончит свою работу и отметит эти данные, как успешно проверенные (успешно проверенные представленные пользователем данные авторизации могут далее использоваться некоторыми другими функциями). Если эта функция не может проверить представленные данные по каким-либо причинам, то она возвратит ошибку, и дальнейший сценарий должен вызвать функцию proxy_challenge(), которая заново начнет процесс авторизации пользователя.

Значения для параметров следующие:

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

Если используется пустая строка "", тогда сервер сам сгенерирует ее на основании полученного запроса. Для этого будет использоваться доменная часть из заголовочного поля "From" SIP сообщения.

Строки могут содержать псевдопеременные.

  • table - Таблица, которая используется для проверки имен пользователей и паролей (обычно - это таблица подписчиков).

Эта функция может использоваться из блока REQUEST_ROUTE.

Пример использования функции proxy_authorize:
...
if (!proxy_authorize("", "subscriber)) {
proxy_challenge("", "1"); # Realm will be autogenerated
};
...



Ссылки по теме