У меня есть модуль Apache для разработчиков (PingFederate), который устанавливает переменные среды на основе полученного токена. Я хотел бы контролировать доступ к каталогам на основе значения переменной окружения.Apache ACL на основе значения переменной среды
Например, модуль устанавливает переменные, как это: [PF_AUTH_SUBJECT] => Aaron [PF_AUTH_GROUPS] => CN = Application.E18.Users, OU = Внутренние, DC = локальная, CN = Application.E17.Users, OU = Internal, DC = local
Я хочу защитить каталог, чтобы к нему могли обращаться только пользователи из группы 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>
Во всех этих случаях РАЗРЕШЕНЫ переменная окружения не установлена.