• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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-groupdbd-logindbd-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-loginRequire 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-loginRequire 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-loginRequire 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优先。

    上篇:mod_authz_core

    下篇:mod_authz_dbm