mod_authz_dbd
| 描述: | Group 授权和使用 SQL 登录 |
| 状态: | 延期 |
| 模块标识符: | authz_dbd_module |
| 源文件: | mod_authz_dbd.c |
| 兼容性: | 可在 Apache 2.4 及更高版本中使用 |
摘要
此模块提供授权功能,以便允许或拒绝经过身份验证的用户通过 group 成员身份访问 web 站点的某些部分。mod_authz_groupfile和mod_authz_dbm提供了类似的功能,其中 exception 是该模块查询 SQL 数据库以确定用户是否是 group 的成员。
该模块还可以提供 database-backed user login/logout 功能。当与mod_authn_dbd一起使用时,这些可能是大多数 value。
此模块依赖mod_dbd指定后端数据库驱动程序和连接参数,并管理数据库连接。
要求指令
在授权阶段使用 Apache 的要求指令,以确保允许用户访问资源。 mod_authz_dbd 使用dbd-group,dbd-login和dbd-logout扩展授权类型。
由于 v2.4.8,在 DBD require 指令中受支持。
要求 dbd-group
该指令指定用户获得访问权所需的 group 成员资格。
Require dbd-group team AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
要求 dbd-login
该指令指定要 run 的查询,指示用户已登录。
Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
要求 dbd-logout
该指令指定要 run 的查询,指示用户已注销。
Require dbd-logout AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
数据库登录
除了检查 group 成员资格的标准授权 function 之外,该模块还可以通过 database-backed login/logout 功能提供 server-side user session management。具体来说,只要用户访问指定的 URL(当然主题是提供必要凭据的用户),它就可以更新用户在数据库中的 session 状态。
这通过定义两个特殊的要求类型来起作用:Require dbd-login和Require dbd-logout。有关用法详细信息,请参阅下面的 configuration example。
Client 登录 integration
某些管理员可能希望实现与此模块提供的 server-side login/logout 功能一致的 client-side session management,例如,通过在用户登录或注销时设置或取消设置 HTTP cookie 或其他此类令牌。
为了支持这样的 integration,mod_authz_dbd导出一个可选的 hook,只要在数据库中更新用户的状态,它就会 run。然后,其他 session management 模块可以使用 hook 来实现启动和结束 client-side 会话的功能。
Configuration example
# 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 指令
| 描述: | 确定在成功登录时是否将 Client 重定向到“引用”页面,如果存在Referer请求标头,则将其注销 |
| 句法: | AuthzDBDLoginToReferer On\|Off |
| 默认: | AuthzDBDLoginToReferer Off |
| Context: | 目录 |
| 状态: | 延期 |
| 模块: | mod_authz_dbd |
与Require dbd-login或Require dbd-logout结合使用时,可以选择将 client 重定向回“引用”页面(Referer HTTP 请求标头中的 URL,如果存在)。如果没有Referer标题,AuthzDBDLoginToReferer On将被忽略。
AuthzDBDQuery 指令
| 描述: | 为所需操作指定 SQL 查询 |
| 句法: | AuthzDBDQuery query |
| Context: | 目录 |
| 状态: | 延期 |
| 模块: | mod_authz_dbd |
AuthzDBDQuery指定 run 的 SQL 查询。查询的目的取决于有效的要求指令。
- 与
Require dbd-group指令一起使用时,它指定查询以查找当前用户的组。这是其他授权模块的标准功能,例如mod_authz_groupfile和mod_authz_dbm。查询语句返回的每一行的第一列 value 应该是包含 group name 的 string。可以返回零行,一行或多行。
Require dbd-group AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"
- 当与
Require dbd-login或Require dbd-logout指令一起使用时,它将永远不会拒绝访问,而是执行一个旨在 log 用户进入或退出的 SQL 语句。用户必须已使用mod_authn_dbd进行身份验证。
Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
在所有情况下,执行 SQL 查询时,用户的 ID 将作为单个 string 参数传递。它可以使用%s格式说明符在查询语句中引用。
AuthzDBDRedirectQuery 指令
| 描述: | 指定查询以查找用户的登录页面 |
| 句法: | AuthzDBDRedirectQuery query |
| Context: | 目录 |
| 状态: | 延期 |
| 模块: | mod_authz_dbd |
指定在成功登录(或注销)后将用户重定向到 URL 的可选 SQL 查询,该 URL 可能特定于用户。执行 SQL 查询时,用户的 ID 将作为单个 string 参数传递。它可以使用%s格式说明符在查询语句中引用。
AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"
查询语句返回的第一行的第一列 value 应该是一个包含要重定向 client 的 URL 的 string。后续行将被忽略。如果未返回任何行,则不会重定向 client。
请注意,如果两者都设置,则AuthzDBDLoginToReferer优先。
