我有一个供应商 Apache 模块 (PingFederate),它根据收到的令牌设置环境变量。我想根据环境变量的值控制对目录的访问。
例如,模块设置如下变量: [PF_AUTH_SUBJECT] => aaron [PF_AUTH_GROUPS] => CN=Application.E18.Users,OU=Internal,DC=local,CN=Application.E17.Users,OU=Internal,DC=当地的
我想保护一个目录,以便只有 CN=Application.E18... 组中的用户可以访问它。我的位置方向配置如下所示:
<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>
在所有这些实例中,未设置 ALLOWED 环境变量。