我有一个供应商Apache模块(PingFederate),它根据它接收到的令牌设置环境变量。我想根据环境变量的值控制对目录的访问。基于环境变量值的Apache ACL
例如模块将变量是这样的: [PF_AUTH_SUBJECT] =>亚伦 [PF_AUTH_GROUPS] => CN = Application.E18.Users,OU =内部,DC =本地,CN = Application.E17.Users, OU =内部,DC =本地
我想保护一个目录,以便只有组CN = Application.E18 ...中的用户才能访问它。我的位置方向conf看起来像这样:
<Location /example_app>
SetEnvIf %{PF_AUTH_GROUPS} ^.*CN=Application.E18.Users.*$ ALLOWED
AuthName "ACL PingFederate restricted"
AuthType PFApacheAgent
Order Deny,Allow
Deny from all
Allow from all
</Location>
这似乎不起作用。我已经试过:
SetEnvIf %{PF_AUTH_GROUPS} ^.*CN=Application.E18.Users.*$ ALLOWED
SetEnvIf %{PF_AUTH_GROUPS} ^.*Application.*$ ALLOWED
SetEnvIf %{PF_AUTH_GROUPS} ^.*A.*$ ALLOWED
的作品的唯一事情是:
SetEnvIf %{PF_AUTH_GROUPS} ^.*$ ALLOWED
这显然是行不通的。
https://issues.apache.org/bugzilla/show_bug.cgi?id=25725有些人知道,SetEnvIf不会测试环境变量,但http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html的文档提到“这是一个与请求相关的列表中的环境变量”,这应该是。
我用这个也试过了mod_rewrite:
RewriteEngine On
<Location /example_app>
RewriteCond %{PF_AUTH_GROUPS} ^.*Application.E18.Users.*$
RewriteRule - [E=ALLOWED:1]
AuthName "ACL PingFederate restricted"
AuthType PFApacheAgent
Order Deny,Allow
Deny from all
Allow from all
</Location>
在所有这些情况允许的环境变量没有设置的。