使用 HaProxy 在后台添加凭证

使用 HaProxy 在后台添加凭证

语境

我写了一篇开源插件适用于 (开源) 代码质量分析工具 (SonarQube)。此插件添加了一组 REST 服务,可将徽章生成为 SVG 图像。该工具可通过 http 或 https 访问(取决于安装方式)。

插件添加的 REST 服务具有以下特性:它们依赖于未经身份验证的用户不可见的数据,这些数据由其他服务提供(例如项目质量门状态、指标)。因此,它们要求用户在调用提供所需数据的服务之前进行身份验证(这是不现实的,因为 URL 应该插入到标签中<img>),或者在 URL 中提供凭据,如下所示:

http://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service

或者

https://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service

在我看来,无需身份验证即可访问这些徽章生成服务是合法的,并且被用户接受(不是说必须的)。但是,我有两个问题:

  1. 大多数情况下<SECURITY_TOKEN>甚至是<private_server_ip>不能向外界公开的。
  2. 在某些情况下,即使<SECURITY_TOKEN>可以接受公开,它也不起作用,因为某些网站(例如 GitHub 的 markdown)会忽略语法并且在调用 url 时<AUTH>@<SERVER>不会通过。<AUTH>

不幸的是,到目前为止,SonarQube 开发团队拒绝允许(选定的)公共 REST 服务在未经身份验证的情况下调用私有服务。

没有其他方法可以提供安全令牌。

我想要实现的目标

我想提供一些指导方针来帮助人们在 SonarQube 前面设置一个 HaProxy 反向代理,对于发送到的每个请求:

http://<public_server_ip>:80/api/xyz_service

...将转发至:

http://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service

...或者(如果使用 https 后端)将其转发到:

https://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service

这将允许人们使用依赖于安全 REST 服务的徽章扩展(或任何其他扩展),同时保持服务器的安全令牌和内部 IP 秘密(换句话说,这将是上述问题的干净解决方法)。

请注意,可以向服务提供参数。到目前为止,我只使用 GET HTTP 方法。

我的请求

我从未使用过 HaProxy,所以我不知道该怎么做,所以:

  • 使用 HaProxy 可以实现我所描述的功能吗?
  • 你能帮我么?
  • 您能给我提供一个简约配置示例吗?

提前感谢您的帮助!(我很乐意将帮助我解决此问题的人列为项目贡献者)

此致,

米歇尔

相关内容