通过 apache2 反向代理进行角色管理身份验证

通过 apache2 反向代理进行角色管理身份验证

最初发布在 SO,但我想它更适合这里。欢迎提出建议、评论,最好还有解决方案!(顺便说一句,如果放错了地方,我会删除 SO Thread)

我需要设置反向代理以提供从外部到内部服务器的受限访问。以下是主要要求:

  • 重定向来自的请求https://www.example.comhttp://内部服务器(完毕)
  • 依靠简单但经过验证的身份验证机制。(目前正在工作)
  • 通过向 URL 添加一些 GET 参数来管理用户角色。(但是如何做?)
  • 该服务器正在托管一个 Java 应用程序。我目前无法访问它,并且其应用程序代码不能更改。这应该没关系。

我安装并配置mod_proxy,重定向工作正常。
身份验证使用的是 apache2基本认证,从安全角度来说应该足够了。

现在,我的问题是角色管理。我需要修改请求,以便用户 foo 具有管理员权限,而用户 bar 没有。它应该像设置一个 GET 参数一样简单"&role=admin",但我不知道在代理请求时如何执行此操作。

角色目前存储在专用的 MySQL 数据库中,因此获取权限只需要一个请求,这在 PHP 中很容易完成。我的问题是,如果我调用 php 页面,我不知道如何保持代理行为。我希望每个请求都附加角色参数,但需要保持请求的其余部分不变。

我当前的代理使用虚拟主机配置(别名 .htaccess)完成所有操作,但我不知道哪种方法可行。我无法在 VHost 中执行 MySQL 请求,重定向到 php 页面会 -据我所知- “打破”代理概念,因为我会重定向,但可能会丢失“其他请求参数”,这对我来说不是很清楚,因为我从未使用过代理。

libapache2-mod-auth-mysql可能是一个解决方案,但该模块似乎已停用,所以我甚至无法尝试。mod_authn_dbd 可以解决问题吗?到目前为止,我还没有设法使用它登录,但无论如何,我不确定它是否可以解决我添加 get 参数的需求。

我没什么主意了。
我该如何实现我需要的东西?我很确定对于这种常见的需求,存在一个简单的解决方案。

答案1

唯一能想到的就是编写自己的简单代理,例如在 php/curl 上。Apache 将充当支持 php 的 Web 服务器,而 php/curl 将根据提供的用户名代理请求并修改 GET 参数。您甚至可以进行支持 cookie 的身份验证,而不仅仅是 HTTP 身份验证。

您也可以使用 nginx、HTTP 身份验证和 nginx lua 模块尝试同样的事情,但这基本上是相同的东西,减去在 lua 中编写代理的必要性 - lua 只会决定用户是否值得管理员角色,而 nginx 将代理请求并修改 GET 参数。

相关内容