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
优先。