【问题标题】:Allow user with ANY password IF coming from a specific IP address如果来自特定 IP 地址,则允许用户使用任何密码
【发布时间】:2020-11-22 00:15:41
【问题描述】:

我们在 Apache 反向代理后面有一个 HTTP 服务,该服务需要由运行在与特定 IP 地址不同的服务器上的脚本访问,以模拟任何用户。

Apache 反向代理通过 LDAP 服务器对用户进行身份验证,并通过特殊的 X-Remote-User 标头将用户名传递给上述 HTTP 服务。

这个远程脚本不知道任何用户的密码,因此 Apache 应该让它在没有密码、任何密码甚至所有帐户的一次性密码的情况下访问资源。 Anynomous 访问不是解决方案,因为脚本需要实际模拟用户,即 Apache 必须通过额外的 X-Remote-User HTTP 标头传递用户名。通常,从开放 Internet 访问时提供用户名和密码的用户访问此服务。我无法更改实际的 HTTP 服务,只能更改最终用户连接的 Apache 反向代理。

这可能吗?我用 尝试了许多配置,但没有一个有效,即。如果脚本从这个 IP 地址访问 HTTP 服务,它会得到 403 等,可能是因为如果请求来自 1.2.3.4,Apache 甚至没有传递用户名。

理想的解决方案是要求用户输入用户名和密码,但如果密码来自特定 IP 地址,则允许用户提供任何密码。有什么想法吗?

【问题讨论】:

    标签: apache authentication reverse-proxy


    【解决方案1】:

    回答我自己的问题,最后的解决方案相当优雅:

    RequestHeader set X-Remote-User "expr=%{HTTP:Authorization}"
    RequestHeader edit X-Remote-User "^Basic (.*)$" $1
    RequestHeader set X-Remote-User "expr=%{unbase64:%{HTTP:X-Remote-User}}"
    RequestHeader edit X-Remote-User "(.*):.*$" $1
    
    <RequireAny>
        Require ip 1.2.3.4
    </RequireAny>
    

    当从给定的 IP 地址访问服务时,这会将凭据(消除密码)传递给后端服务器。然后在 1.2.3.4 上运行的脚本可以模拟它想要的任何用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 2017-10-01
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多