在 apache 下获取经过身份验证的用户

在 apache 下获取经过身份验证的用户

在 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,则这可能是一个潜在的安全漏洞,会将用户名信息泄露给黑客。我个人只转发到本地主机,所以这对我来说不是问题。

相关内容