语境
我写了一篇开源插件适用于 (开源) 代码质量分析工具 (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
在我看来,无需身份验证即可访问这些徽章生成服务是合法的,并且被用户接受(不是说必须的)。但是,我有两个问题:
- 大多数情况下
<SECURITY_TOKEN>
甚至是<private_server_ip>
不能向外界公开的。 - 在某些情况下,即使
<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 可以实现我所描述的功能吗?
- 你能帮我么?
- 您能给我提供一个简约配置示例吗?
提前感谢您的帮助!(我很乐意将帮助我解决此问题的人列为项目贡献者)
此致,
米歇尔