无法使用 AJP 检索登录信息

无法使用 AJP 检索登录信息

我们正在使用 Apache 对 tomcat 中定义的 web 服务进行 LDAP 身份验证。使用 AJP 连接器进行 proxypass、proxyserverpass。我们面临的问题是我们无法在 tomcat 应用程序中检索用户信息。即使我们有一个属性已设置为 false,如下所示tomcatAuthentication = false。我们尝试通过 web 服务进行检索的方式是通过登录 web 服务,该服务应该使用来检索用户信息,HttpServletRequest.getRemoteUser()但我没有看到此 web 服务返回任何用户名,这意味着 AJP 对我们来说不起作用。

如果我可以回答更具体的问题,请告诉我。

如何排除故障?

Unbeliever按照评论中的要求,在 Apache 服务器上添加用于 LDAP 身份验证的配置:

<Directory "/var/lib/apache-tomcat-8.0.33/app/foo/">
#<Directory "/foo">
        AuthType Basic
        AuthName "AD Apache Login"
        AuthBasicProvider ldap
        #AuthzLDAPAuthoritative on
        AuthLDAPURL "ldap://ad.one.example.com:3268/dc=one,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"
        AuthLDAPBindDN "[email protected]"
        AuthLDAPBindPassword "123456"
        Require valid-user
        Options FollowSymLinks
        Options -MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>
Servername one.example.com
#ProxyPreserveHost On
ProxyPass "/app/foo" "ajp://one.example.com:8009/"
ProxyPassReverse "/app/foo" "ajp://one.example.com:8009/"
#Servername localhost
ErrorLog /var/log/httpd/ajp.error.log
CustomLog /var/log/httpd/ajp.log combined
</VirtualHost>

答案1

这里的问题是,基本身份验证纯粹是在 Apache 和浏览器之间进行的,没有任何东西(或至少很少的东西)被传递到任何代理资源上。我应该说,在使用 LDAP 作为底层身份验证方法时,我目前没有直接的经验,但使用基本身份验证时,REMOTE_USER 无法用于代理资源的问题肯定不是一个新问题。

这是一个配置片段,如果您只需要 REMOTE_USER,您应该能够直接使用它,或者可以根据自己的需要进行调整:

RewriteEngine On
# Use mod_rewrite to 'look ahead' and determine the REMOTE_USER variable
# And set an Environment Variable
RewriteRule ^ - [E=MY_REMOTE_USER:%{LA-U:REMOTE_USER}]
# Set a new request header 'THE_REMOTE_USER' based on that new environment vaiable
RequestHeader set THE_REMOTE_USER "%{MY_REMOTE_USER}e"

然后,您可以访问代理应用程序中的“THE_REMOTE_USER”HTTP 标头。

相关内容