描述: | 组授权和使用SQL登录 |
---|---|
状态: | 延期 |
模块标识符: | authz_dbd_module |
源文件: | mod_authz_dbd.c |
兼容性: | 在Apache 2.4和更高版本中可用 |
此模块提供授权功能,以便可以通过组成员身份来允许或拒绝经过身份验证的用户访问网站的某些部分。类似的功能是通过提供mod_authz_groupfile
和
mod_authz_dbm
,与此模块查询一个SQL数据库,以确定用户是否是一个组的成员的异常。
该模块还可以提供数据库支持的用户登录/注销功能。与结合使用时,这些可能最有价值mod_authn_dbd
。
该模块依赖于mod_dbd
指定后端数据库驱动程序和连接参数,并管理数据库连接。
Require
在授权阶段使用Apache的指令,以确保允许用户访问资源。mod_authz_dbd延长授权类型的dbd-group
,dbd-login
和
dbd-logout
。
从v2.4.8开始,DBD require指令支持表达式。
该指令指定用户获得访问权限所需的组成员身份。
Require dbd-group team AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
该指令指定要运行的查询,指示用户已登录。
Require dbd-login AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
该伪指令指定要运行的查询,指示用户已注销。
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>
描述: | 确定是否在成功登录或注销时将客户端重定向到引荐页面(如果存在Referer 请求标头) |
---|---|
句法: | AuthzDBDLoginToReferer On|Off |
默认: | AuthzDBDLoginToReferer Off |
内容: | 目录 |
状态: | 延期 |
模块: | mod_authz_dbd |
与Require dbd-login
或
结合使用Require dbd-logout
,这提供了将客户端重定向回引荐页(Referer
HTTP请求标头中的URL ,如果存在)的选项。当没有Referer
头时,
AuthzDBDLoginToReferer On
将被忽略。
描述: | 为所需的操作指定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查询时,用户ID都将作为单个字符串参数传递。可以使用%s
格式说明符在查询语句中引用它。
描述: | 指定查询以查找用户的登录页面 |
---|---|
句法: | AuthzDBDRedirectQuery query |
内容: | 目录 |
状态: | 延期 |
模块: | mod_authz_dbd |
指定一个可选的SQL查询,该查询在成功登录(或注销)后用于将用户重定向到特定于该用户的URL。执行SQL查询时,用户ID将作为单个字符串参数传递。可以使用%s
格式说明符在查询语句中引用它。
AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"
查询语句返回的第一行的第一列值应该是一个字符串,其中包含要将客户端重定向到的URL。随后的行将被忽略。如果未返回任何行,则不会重定向客户端。
请注意,AuthzDBDLoginToReferer
如果两者都设置,则优先。