在 Windows 上使用带有 mod_auth_sspi 和 mod_headers 的 Apache 2.2。我试图将当前经过身份验证的用户传递到 X-Remote-User 标头中的代理目标。
我认为这很简单,但是我已经与 Apache 争论了一个小时,却无法在文档或谷歌中找到秘诀。
我的配置如下。它使用 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>
答案1
是啊。后来我又在 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>
答案2
我知道这是一篇古老的帖子,但既然用户仍然会点击它,我想我会补充一点,在 ssl 环境“%{VAR}s”和非 ssl 环境 %{VAR}e 中可用的变量有很大的不同
我发现 pubcookie 将远程用户仅设置为安全环境变量,我可以通过以下方式转发:
RequestHeader set X-REMOTE-USER %{REMOTE_USER}s
注意:以 s 结尾而不是以 e 结尾!
现在,如果您将请求转发到其他服务器或使用 http,则这可能是一个潜在的安全漏洞,会将用户名信息泄露给黑客。我个人只转发到本地主机,所以这对我来说不是问题。