如何在HTTP标头中设置REMOTE_USER?

F.T*_*F.T 1 apache authentication header http

我的Apache设置有问题.

我安装了部分接受外部身份验证的Web应用程序:

  • 我使用Apache来管理对我的应用程序网页的访问.
  • 如果身份验证成功,则使用用户名设置环境变量REMOTE_USER.
  • 然后通过HTTP标头将用户名传递给我的应用程序,以便在用户会话上打开应用程序.
  • 这主要是应用程序的Apache配置.我只在我的应用程序配置文件中设置包含用户名的变量(HTTP标头)的名称.

这是问题:我可以成功进行身份验证(大多数情况下)但我的HTTP标头设置为null.

一些额外的细节:

  • 我使用Apache和mod_perl模块(AuthenNIS + AuthzNIS + Net-NIS)通过NIS帐户向我的应用程序进行身份验证.
  • 使用以下Apache配置文件,当我尝试访问我的应用程序但是REMOTE_USER标头设置为null时,我有身份验证表单.

        Listen 2208
        <VirtualHost *:2208>
    
                    RewriteEngine on
                    DocumentRoot "/path/to/static"
    
    
                    <Directory "/path/to/static">
    
                                Options +Indexes FollowSymLinks MultiViews
                                AllowOverride None
                                Order allow,deny
                                Allow from all
    
    
                                AuthType Basic
                                AuthName "Authentifiez vous"
                                PerlAuthenHandler Apache2::AuthenNIS
                                PerlAuthzHandler Apache2::AuthzNIS
                                PerlSetVar AllowAlternateAuth no
                                require valid-user
    
                    </Directory>
    
    
                    RewriteEngine on
                    RewriteRule . - [E=RU:%{LA-U:REMOTE_USER}]
                    RequestHeader set REMOTE_USER %{RU}e
    
                           RewriteRule ^/apps$ /apps/ [R]
                           RewriteRule ^/static/style/(.*) /path/to/static/june_2007_style/blue/$1 [L]
                           RewriteRule ^/static/scripts/(.*) /path/to/static/scripts/packed/$1 [L]
                           RewriteRule ^/static/(.*) /path/to/static/$1 [L]
                           RewriteRule ^/favicon.ico /path/to/static/favicon.ico [L]
                           RewriteRule ^/robots.txt /path/to/static/robots.txt [L]
                           RewriteRule ^(.*) http://localhost:2209$1 [P]
    
        </VirtualHost>
    
    Run Code Online (Sandbox Code Playgroud)

如果我将RequestHeader设置为REMOTE_USER"username",则应用程序将在相应的用户会话中打开.

要查看REMOTE_USER的值,我使用Firebug Firefox模块显示http标头的值+我的应用程序有一个脚本,显示传递给它的变量值.

我在index.php页面上测试了几乎相同的Apache配置,该页面显示了http请求中服务器变量的值.不同之处在于RewriteRules.

        <?PHP
                    foreach($_SERVER as $key_name => $key_value) {
                    print $key_name . " = " . $key_value . "<br>";

                    }
        ?>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到一个带有用户名值的REMOTE_USER和HTTP_REMOTE_USER.

我不明白我的问题在哪里.

Apache 2.2.31 RedHat 6.5

提前致谢 !

Han*_*eck 8

请勿使用以下内容,因为如果使用mod_authn_ntlm等模块设置REMOTE_USER,则会遇到执行阶段的问题(ntlm与本地计算机有关,请参阅https://support.microsoft.com/en-us/kb/896861) .

RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule . - [E=RU:%1]
RequestHeader set X-Remote-User %{RU}e
Run Code Online (Sandbox Code Playgroud)

而是使用以下方法:

RequestHeader set X-Remote-User expr=%{REMOTE_USER}
Run Code Online (Sandbox Code Playgroud)

还有一个mod_ssl的解决方案

RequestHeader set X-Remote-User %{REMOTE_USER}s
Run Code Online (Sandbox Code Playgroud)

  • 这是Apache 2.4的正确答案.旧样式(RewriteCond等)仅适用于2.2. (2认同)
  • 我很想给-1,因为将错误的方式突出地作为第一个代码块。尽管其他文本对此提出了警告,但完整的 stackoverflow 开发人员很容易陷入麻烦。当然,我们这些粗心的人可能活该,但仍然...... (2认同)