【问题标题】:Apache ACL based on environment variable value基于环境变量值的 Apache ACL
【发布时间】:2015-01-17 07:27:29
【问题描述】:

我有一个供应商 Apache 模块 (PingFederate),它根据收到的令牌设置环境变量。我想根据环境变量的值控制对目录的访问。

例如,模块设置变量如下: [PF_AUTH_SUBJECT] => 亚伦 [PF_AUTH_GROUPS] => CN=Application.E18.Users,OU=Internal,DC=local,CN=Application.E17.Users,OU=Internal,DC=local

我想保护一个目录,以便只有 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 环境变量。

【问题讨论】:

    标签: apache mod-rewrite pingfederate


    【解决方案1】:

    您需要让mod_rewrite 执行2 次才能利用mod_pf 生成的标头,因为后者在前者之后执行:

    RewriteEngine On
    RewriteCond %{ENV:REDIRECT_PASS} !1
    RewriteRule .* $1 [L,E=PASS:1]
    
    RewriteCond %{HTTP:PF_AUTH_GROUPS} !^.*ECN.*$
    RewriteRule .* $1 [L,R=401]
    

    这也记录在这里:https://ping.force.com/Support/PingIdentityArticle?id=kA340000000Gs7bCAC

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2021-12-25
      • 2018-11-14
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多