我在 Apache 中使用 mod_authz_dbd 进行访问控制时遇到问题:
require dbd_group
我有一个 Apache 反向代理,它必须进行身份验证和授权才能让用户访问他们的项目。项目需要一个包含组的 http 标头,用于基于角色的访问控制。目前我想授权用户,如果他们有一个有效的项目组。我将以下 mysql 数据库与我的 apache 服务器一起使用:
______________ _________________ __________________
| User | | User's project | | Project |
|--------------| |-----------------| |------------------|
|PK | id |_ |PK | id | _|PK | id |
| | username | \_|FK | user_id | / | | url |
| | password | |FK | project_id |_/ | | project name |
|______________| | | group | |__________________|
|_________________|
项目 url 是相对 url,如“/foo”。
每个用户可以在多个项目中工作,并且每个用户可以有不同的组,组是每个项目并且可以采用三个值:
- 行政
- pm 项目经理
- 为开发人员开发
为了实现这一点,我在我的配置文件中写了:
# Get relative url in environment variable.
RewriteRule (.*) - [E=TARGET_URL:$1]
Require dbd-group "admin"
Require dbd-group "pm"
Require dbd-group "dev"
AuthzDBDQuery "SELECT group FROM user, project, users_project WHERE username = %s AND url='%{TARGET_URL}e' AND project.id = users_project.project_id AND user.id = users_project.user_id"
# Here set the group but how ?
RequestHeader set "X-Forwarded-Groups" "group"
但我有两个问题:
首先,在 SQL 查询中使用环境变量不起作用。那么,如何在 AuthzDBDQuery 中使用用户名和 url 作为参数进行查询?
其次,如何从 AuthzDBDQuery 中获取组以将其设置在 http 标头中?
我还尝试使用带有 dbd 的 RewriteMap,然后使用 python 脚本使用 prg,但同样的问题,我没有找到如何传递两个参数。