Spec-Zone.ru › Apache HTTP Server

Модуль 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API