<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_authz_dbd

可用语言:  en  |  fr 

描述使用 SQL 进行组授权和登录
状态扩展
模块标识符authz_dbd_module
源文件mod_authz_dbd.c
兼容性在 Apache 2.4 及更高版本中可用

摘要

此模块提供授权功能,以便通过组成员资格允许或拒绝经过身份验证的用户访问网站的某些部分。mod_authz_groupfilemod_authz_dbm 提供类似的功能,区别在于此模块查询 SQL 数据库以确定用户是否为某个组的成员。

此模块还可以提供基于数据库的用户登录/注销功能。当与 mod_authn_dbd 结合使用时,这些功能可能最有价值。

此模块依赖于 mod_dbd 来指定后端数据库驱动程序和连接参数,并管理数据库连接。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

Require 指令

Apache 的 Require 指令在授权阶段使用,以确保用户被允许访问资源。mod_authz_dbd 使用 dbd-groupdbd-logindbd-logout 扩展了授权类型。

从 v2.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"
top

数据库登录

除了检查组成员资格的标准授权功能之外,此模块还可以通过基于数据库的登录/注销功能提供服务器端用户会话管理。具体来说,它可以在用户访问指定 URL 时更新数据库中的用户会话状态(当然,前提是用户提供必要的凭据)。

这是通过定义两种特殊的 Require 类型来实现的:Require dbd-loginRequire dbd-logout。有关使用详细信息,请参见下面的配置示例。

top

客户端登录集成

一些管理员可能希望实现与此模块提供的服务器端登录/注销功能协同工作的客户端会话管理,例如,在用户登录或注销时设置或取消设置 HTTP cookie 或其他此类令牌。

为了支持这种集成,mod_authz_dbd 导出一个可选的钩子,该钩子将在用户状态在数据库中更新时运行。其他会话管理模块可以使用该钩子来实现启动和结束客户端会话的功能。

top

配置示例

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

AuthzDBDLoginToReferer 指令

描述确定在成功登录或注销时是否将客户端重定向到引用页面(如果存在 Referer 请求标头)。
语法AuthzDBDLoginToReferer On|Off
默认值AuthzDBDLoginToReferer Off
上下文目录
状态扩展
模块mod_authz_dbd

Require dbd-loginRequire dbd-logout 结合使用时,这提供了将客户端重定向回引用页面(Referer HTTP 请求标头中的 URL,如果存在)的选项。当没有 Referer 标头时,AuthzDBDLoginToReferer On 将被忽略。

top

AuthzDBDQuery 指令

描述指定所需操作的 SQL 查询
语法AuthzDBDQuery query
上下文目录
状态扩展
模块mod_authz_dbd

AuthzDBDQuery 指定要运行的 SQL 查询。查询的目的取决于生效的 Require 指令。

在所有情况下,用户 ID 将作为单个字符串参数传递,当执行 SQL 查询时。它可以使用 %s 格式说明符在查询语句中引用。

top

AuthzDBDRedirectQuery 指令

描述指定一个查询来查找用户的登录页面
语法AuthzDBDRedirectQuery query
上下文目录
状态扩展
模块mod_authz_dbd

指定一个可选的 SQL 查询,在成功登录(或注销)后使用,将用户重定向到一个 URL,该 URL 可能特定于用户。用户 ID 将作为单个字符串参数传递,当执行 SQL 查询时。它可以使用 %s 格式说明符在查询语句中引用。

AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"

查询语句返回的第一行的第一列值应包含一个字符串,其中包含要将客户端重定向到的 URL。后续行将被忽略。如果未返回任何行,则客户端将不会被重定向。

请注意,如果同时设置了 AuthzDBDLoginToReferer,则它优先。

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/主题无关,则可能被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表