Модуль Apache mod_authz_dbd
| Описание: | Авторизация групп и вход с использованием SQL |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | authz_dbd_module |
| Файл исходного кода: | mod_authz_dbd.c |
| Совместимость: | Доступно в Apache 2.4 и более поздних версиях |
Краткое описание
Данный модуль предоставляет возможности авторизации, позволяя разрешать или запрещать доступ аутентифицированным пользователям к частям веб-сайта на основе групповой принадлежности. Аналогичные возможности предоставляют mod_authz_groupfile и mod_authz_dbm, за исключением того, что этот модуль обращается к базе данных SQL для определения принадлежности пользователя к группе.
Этот модуль также может предоставлять возможности входа/выхода из системы с поддержкой базы данных. Они будут наиболее полезны при совместном использовании с mod_authn_dbd.
Этот модуль полагается на mod_dbd для указания драйвера базы данных, параметров подключения и управления соединениями с базой данных.
Директивы Require
Директивы Require Apache используются на стадии авторизации для проверки разрешения доступа пользователя к ресурсу. mod_authz_dbd расширяет типы авторизации с помощью dbd-group, dbd-login и dbd-logout.
С версии 2.4.8 поддерживаются выражения в директивах DBD require.
Require dbd-group
Данная директива указывает групповую принадлежность, необходимую для доступа пользователя.
Require dbd-group team AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
Require dbd-login
Данная директива указывает запрос, который выполняется при входе пользователя в систему.
Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
Require dbd-logout
Данная директива указывает запрос, который выполняется при выходе пользователя из системы.
Require dbd-logout AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
Вход в систему с помощью базы данных
Помимо стандартной функции авторизации, проверяющей групповую принадлежность, этот модуль также может предоставлять управление сеансами пользователей на стороне сервера с помощью функций входа/выхода из системы с поддержкой базы данных. В частности, он может обновлять статус сеанса пользователя в базе данных всякий раз, когда пользователь посещает обозначенные URL-адреса (при условии, конечно, что пользователи предоставляют необходимые учетные данные).
Это реализуется путем определения двух специальных типов Require: Require dbd-login и Require dbd-logout. Подробные сведения об использовании см. в примере конфигурации ниже.
Интеграция входа на стороне клиента
Некоторые администраторы могут захотеть реализовать управление сеансами на стороне клиента, которое работает совместно с возможностями входа/выхода из системы на стороне сервера, предоставляемыми этим модулем, например, устанавливая или снимая HTTP-cookie или другой токен, когда пользователь входит или выходит из системы.
Для поддержки такой интеграции mod_authz_dbd экспортирует необязательный обработчик, который будет выполняться всякий раз, когда статус пользователя обновляется в базе данных. Другие модули управления сеансами могут использовать этот обработчик для реализации функций запуска и завершения сеансов на стороне клиента.
Пример конфигурации
# mod_dbd configuration
DBDriver pgsql
DBDParams "dbname=apacheauth user=apache pass=xxxxxx"
DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
<Directory "/usr/www/my.site/team-private/">
# mod_authn_core and mod_auth_basic configuration
# for mod_authn_dbd
AuthType Basic
AuthName Team
AuthBasicProvider dbd
# mod_authn_dbd SQL query to authenticate a logged-in user
AuthDBDUserPWQuery \
"SELECT password FROM authn WHERE user = %s AND login = 'true'"
# mod_authz_core configuration for mod_authz_dbd
Require dbd-group team
# mod_authz_dbd configuration
AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
# when a user fails to be authenticated or authorized,
# invite them to login; this page should provide a link
# to /team-private/login.html
ErrorDocument 401 "/login-info.html"
<Files "login.html">
# don't require user to already be logged in!
AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
# dbd-login action executes a statement to log user in
Require dbd-login
AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
# return user to referring page (if any) after
# successful login
AuthzDBDLoginToReferer On
</Files>
<Files "logout.html">
# dbd-logout action executes a statement to log user out
Require dbd-logout
AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
</Files>
</Directory> Директива AuthzDBDLoginToReferer
| Описание: | Определяет, следует ли перенаправить клиента на страницу-источник при успешном входе или выходе, если заголовок Referer присутствует |
|---|---|
| Синтаксис: | AuthzDBDLoginToReferer On|Off |
| Значение по умолчанию: | AuthzDBDLoginToReferer Off |
| Контекст: | каталог |
| Статус: | Расширение |
| Модуль: | mod_authz_dbd |
В сочетании с Require dbd-login или Require dbd-logout, это предоставляет возможность перенаправить клиента обратно на страницу-источник (URL в заголовке Referer HTTP-запроса, если он присутствует). Если заголовок Referer отсутствует, то AuthzDBDLoginToReferer On игнорируется.
Директива AuthzDBDQuery
| Описание: | Указывает SQL-запрос для необходимой операции |
|---|---|
| Синтаксис: | AuthzDBDQuery query |
| Контекст: | каталог |
| Статус: | Расширение |
| Модуль: | mod_authz_dbd |
Директива AuthzDBDQuery указывает SQL-запрос для выполнения. Цель запроса зависит от действующей директивы Require.
- При использовании с директивой
Require dbd-groupона указывает запрос для поиска групп для текущего пользователя. Это стандартная функция других модулей авторизации, таких какmod_authz_groupfileиmod_authz_dbm. Значение первого столбца каждой строки, возвращаемой оператором запроса, должно быть строкой, содержащей имя группы. Может быть возвращено ноль, одна или несколько строк.Require dbd-group AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"
- При использовании с директивами
Require dbd-loginилиRequire dbd-logoutона никогда не будет отказываться от доступа, а вместо этого выполнит SQL-запрос для входа или выхода пользователя. Пользователь должен быть уже аутентифицирован с помощьюmod_authn_dbd.Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
Во всех случаях идентификатор пользователя будет передан как единственный строковый параметр при выполнении SQL-запроса. Он может быть использован в операторе запроса с помощью спецификатора формата %s.
Директива AuthzDBDRedirectQuery
| Описание: | Указывает запрос для поиска страницы входа для пользователя |
|---|---|
| Синтаксис: | AuthzDBDRedirectQuery query |
| Контекст: | каталог |
| Статус: | Расширение |
| Модуль: | mod_authz_dbd |
Указывает необязательный SQL-запрос, который используется после успешного входа (или выхода) для перенаправления пользователя на URL-адрес, который может быть специфичным для пользователя. Идентификатор пользователя будет передан как единственный строковый параметр при выполнении SQL-запроса. Он может быть использован в операторе запроса с помощью спецификатора формата %s.
AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"
Значение первого столбца первой возвращенной строки должно быть строкой, содержащей URL-адрес для перенаправления клиента. Последующие строки будут проигнорированы. Если строк не возвращено, перенаправления не будет.
Обратите внимание, что AuthzDBDLoginToReferer имеет приоритет, если оба параметра установлены.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_authz_dbd.html