根据请求字符串使用 LDAP 动态验证 Apache?

根据请求字符串使用 LDAP 动态验证 Apache?

是否可以使用请求 URI 的一部分作为 mod_authnz_ldapRequire ldap-group指令的输入?

我正在尝试动态检查对一系列不同项目目录的访问,这些目录均位于http://testserver.com/projects/,这样访问的用户/projects/abc将被检查是否属于cn=abc,ou=groups,dc=test。理想情况下,我希望这样做,而无需为每个项目创建单独的 Location 指令,因为可能会有数百个项目。

我想出了这个,它说明了一般的概念,但它不起作用(project_name 没有检索实际的变量内容):

<Location /projects>
    SetEnvIf Request_URI "/projects/([-a-z0-9A-Z_]+)/" project_name=$1

    AuthType Basic
    AuthBasicProvider ldap
    AuthName "Restricted Resource - SVN (LDAP)"
    AuthLDAPURL "ldap://127.0.0.1:389/dc=test?uid"
    AuthLDAPGroupAttributeIsDN off
    AuthLDAPGroupAttribute memberUid
    Require ldap-group cn=%{project_name},ou=groups,dc=test
</Location>

帮助?

答案1

在 Apache 2.4.8 及更高版本中,现在可以实现这一点:

SetEnvIf Request_URI "/projects/([-a-z0-9A-Z_]+)/" project_name=$1
Require ldap-group cn=%{env:project_name}, ou=groups, dc=test

Require请注意,指令中可能需要空格。请参阅修改 LDAP 服务器文档,尤其是示例 5。

感谢 Buri 为这个老问题找到了答案基于服务器名称的动态组名的 Apache2 ldap 授权

答案2

我相信 Apache 2.4 在这方面比 2.2 有更多功能...值得一看。

或者,也许值得考虑构建您自己的自定义模块;它并不像看起来那么可怕——假设您对 C 语言很熟悉。

类似地,mod_perl 不是通过钩子提供了很多 Apache 扩展功能吗?

答案3

您可以尝试向 AuthLDAPURL 参数添加过滤器:https://httpd.apache.org/docs/2.4/en/mod/mod_authnz_ldap.html#authldapurl

也许是这样的:

AuthLDAPURL "ldap://127.0.0.1:389/dc=test?uid?sub?(memberof=cn=%{project_name},ou=groups,dc=test)"

相关内容