具有基本身份验证的 Apache 和 Tomcat 反向代理:Tomcat 可以接收用户名吗?
Posted
技术标签:
【中文标题】具有基本身份验证的 Apache 和 Tomcat 反向代理:Tomcat 可以接收用户名吗?【英文标题】:Apache & Tomcat reverse proxy with basic authentication: Can Tomcat receive the username? 【发布时间】:2015-11-05 11:32:03 【问题描述】:我已成功将 Apache 配置为侦听 SSL/443 和代理 Tomcat 侦听 HTTP/8080。我还在 Apache 中设置了基本身份验证。
一旦用户连接到我的 Tomcat servlet,HttpServletRequest.getRemoteUser() 将被填充还是为空。如果为null,如何获取远程用户?
【问题讨论】:
你使用的是mod_proxy
还是mod_proxy_ajp
?
@larsks 我正在使用 mod_proxy。
【参考方案1】:
最简单的解决方案可能是使用mod_proxy_ajp
,它除了代理请求外,还会向Tomcat传输各种元数据,包括REMOTE_USER
等身份验证信息。
These docs for Alfresco 讨论此配置,其中包括 Tomcat 端(以便它知道信任转发的身份验证)和 Apache 端的更改。
如果您使用像 mod_proxy
这样的通用 http 代理,则需要安排 Apache 将 REMOTE_USER
的值添加到请求中(可能作为 X-
标头),然后安排您的Tomcat 应用程序来识别和信任该标头(显然您需要安排您的前端代理从任何传入请求中剥离该标头)。
我不知道你会如何在 tomcat 方面做到这一点,但this post 似乎有一些建议。
【讨论】:
【参考方案2】:我需要添加
<Location />
Order allow,deny
Allow from all
RequestHeader unset Authorization
</Location>
到包装位置,RequestHeader 是修复它的专业。
我(再次)通过http://codeblow.com/questions/remove-fundamental-authentication-header-with-apache-mod-proxy/ 找到了这个 - 不知道我去年最初在哪里找到它,这是针对某些安全问题的最后措施。
【讨论】:
以上是关于具有基本身份验证的 Apache 和 Tomcat 反向代理:Tomcat 可以接收用户名吗?的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat 8.5 JDBC领域,具有盐腌密码摘要:身份验证失败
带有客户端身份验证的 Apache HTTPD/mod_proxy/Tomcat 和 SSL
Undertow 是不是具有与 Tomcat Web 身份验证等效的 Web 层身份验证功能?