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 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

Spec-Zone.ru

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