在代理tomcat之前在apache中设置REMOTE_USER

问题描述 投票:0回答:2

在AJP将请求代理到tomcat之前,是否有一种方法可以将REMOTE_USER设置为某些URL的特定值?

我有一个面向SSO(Apache / mod_shib)的tomcat应用程序。某些URL仍需要公开访问。我有shibboleth用于受保护的部分,但是公共部分仍然需要用户名(无法更改应用程序的工作方式)。

我可以正确识别需要公共访问的URL,并为它们关闭shibboleth身份验证。当我这样做时,现在没有用户定义,因此系统拒绝让我进入。

思考我想做的是这个:

IF URL matches pattern:
    turn off shibboleth
    force set REMOTE_USER="anonymous" //and maybe AJP_REMOTE_USER, too?!

我尝试使用FakeBasicAuth来实现最后一位,但是在代理发生后,似乎已设置了用户。有没有办法做到这一点?也许有更好的方法?

一种不太理想的替代方法是将tomcat应用程序配置为使用REMOTE_USER之外的其他方法,然后尝试使用mod_rewrite设置该值。我不想这样做,因为这样用户名将不会显示在tomcat访问日志中。

apache tomcat single-sign-on shibboleth
2个回答
0
投票

操作REMOTE_USER env变量非常困难,如果您在连接的一开始就具有额外的约束要执行此操作,则可以尝试mod_security

不幸的是,为mod_security编写规则并不是世界上最简单的事情。


0
投票

示例在通过身份验证后使用REMOTE_USER变量的内容填充标头X-Remote-User并将标头发送到后端代理(Apache 2.4.6)。

# Example for Apache 2.4.6

<VirtualHost *:80>

RewriteEngine on
<Location />

    ###############################################
    # Your authentication logic here
    AuthType .......
    AuthName .......
    AuthBasicProvider .......
    .... etc
    Require valid-user
    ###############################################

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

</Location>

    ProxyTimeout 300
    ProxyPass / http://localhost:81/
    ProxyPassReverse / http://localhost:81/

</VirtualHost>
© www.soinside.com 2019 - 2024. All rights reserved.