Использование Apache 2.2 в Windows с mod_auth_sspi и mod_headers. Я пытаюсь передать текущего аутентифицированного пользователя прокси-серверу в заголовке X-Remote-User.
Я ожидаю, что это просто, но я уже час спорил с Apache и не могу найти секретный соус в документации или в Google.
Моя конфигурация следующая. Он правильно аутентифицирует пользователя с помощью Active Directory, а затем проксирует запрос на сервер, находящийся позади. Однако заголовок X-Remote-User не добавляется. Похоже, что переменная среды REMOTE_USER не существует. И AUTH_USER тоже.
Я знаю, что аутентифицированное имя пользователя где-то доступно, но как его получить?
ProxyRequests off
ProxyPass /clsoap/ http://127.0.0.1:12001/clsoap/
<Location /clsoap/>
ProxyPassReverse /clsoap/
AuthName "ADTest"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain primary.example.com
SSPIUsernameCase lower
SSPIOfferBasic Off
Require valid-user
RequestHeader set X-Remote-User "%{REMOTE_USER}e" env=REMOTE_USER
RequestHeader set X-Auth-User "%{AUTH_USER}e" env=AUTH_USER
</Location>
Ура. Другой сеанс Google позже пробовал разные случайные ключевые слова, и я обнаружил следующее:
http://www.ruby-forum.com/topic/83067
http://old.nabble.com/Forcing-a-proxied-host-to-generate-REMOTE_USER-to2911573.html#a2914465
Теперь это работает:
ProxyRequests off
ProxyPass /clsoap/ http://127.0.0.1:12001/clsoap/
<Location /clsoap/>
ProxyPassReverse /clsoap/
AuthName "ADTest"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain primary.example.com
SSPIUsernameCase lower
SSPIOfferBasic Off
Require valid-user
RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule . - [E=RU:%1]
RequestHeader set X-Remote-User "%{RU}e" env=RU
</Location>
Я знаю, что это старый пост, но, поскольку пользователи все еще находят его, я подумал, что добавлю, что существует огромная разница в том, какие переменные доступны в среде ssl "% {VAR} s" и в среде без ssl% {VAR} е
Я обнаружил, что pubcookie устанавливает удаленного пользователя только как безопасную переменную среды, которую я могу пересылать следующим образом:
RequestHeader set X-REMOTE-USER %{REMOTE_USER}s
ПРИМЕЧАНИЕ: оканчивается на s, а не на e!
Теперь это может быть потенциальная дыра в безопасности, которая приводит к утечке информации об имени пользователя хакерам, если вы когда-либо перенаправляете запросы на другие серверы или используете http. Я лично пересылаю только localhost, поэтому для меня это не проблема.