具有基本身份验证的 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 可以接收用户名吗?的主要内容,如果未能解决你的问题,请参考以下文章

具有基本身份验证的 Apache 反向代理

Tomcat 8.5 JDBC领域,具有盐腌密码摘要:身份验证失败

带有客户端身份验证的 Apache HTTPD/mod_proxy/Tomcat 和 SSL

Undertow 是不是具有与 Tomcat Web 身份验证等效的 Web 层身份验证功能?

是否可以只允许 Apache HTTPd 静态资源访问在 Tomcat 中经过身份验证的客户端?

如何使用 apache 会话和基本身份验证(在 apache2.4 中)?