![无法使用 AJP 检索登录信息](https://linux22.com/image/694150/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20AJP%20%E6%A3%80%E7%B4%A2%E7%99%BB%E5%BD%95%E4%BF%A1%E6%81%AF.png)
我们正在使用 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 标头。