Мы используем Apache для аутентификации LDAP для веб-сервисов, определенных в tomcat. Использование AJP Connector для proxypass, proxyserverpass. Проблема, с которой мы сталкиваемся, заключается в том, что мы не можем получить информацию о пользователе в приложении tomcat. Несмотря на то, что у нас есть атрибут, установленный на false, как этоtomcatAuthentication = false
. То, как мы пытаемся получить через веб-сервис, - это веб-сервис входа в систему, который должен получать информацию о пользователе, используя HttpServletRequest.getRemoteUser()
но я не вижу, чтобы этот веб-сервис возвращал какое-либо имя пользователя, что означает, что AJP не работает для нас, я считаю.
Пожалуйста, дайте мне знать, если я могу ответить на более конкретный вопрос.
Как устранить неполадки?
Добавление конфигурации на нашем сервере Apache для аутентификации LDAP по запросу Unbeliever
в комментарии:
<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 "registration@one.example.com"
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>
Проблема здесь в том, что базовая аутентификация выполняется исключительно между 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"
Затем вы можете получить доступ к HTTP-заголовку THE_REMOTE_USER в своем прокси-приложении.