Модуль 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 user_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. Подробности использования см. в примере конфигурации ниже.
Интеграция входа в систему на стороне клиента
Некоторые администраторы могут захотеть реализовать управление сеансами на стороне клиента, согласованное с возможностями входа в систему и выхода из неё на стороне сервера, предоставляемыми этим модулем, например устанавливая или удаляя cookie HTTP либо другой подобный токен при входе пользователя в систему или выходе из неё.
Для поддержки такой интеграции 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 из заголовка HTTP-запроса Referer, если он присутствует). Если заголовок 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