使用HaProxy在引擎盖下添加凭据

上下文

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

插件所添加的REST服务具有依赖于对未authentication的用户不可见的数据的特殊性,并且这些数据由其他服务提供(例如项目质量门户状态,指标)。 因此,它们要求用户在调用提供所需数据的服务(这是不现实的,因为URL意图被插入到<img>标签中)之前被authentication,或者在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 

在我的情况下,能够访问这些徽章生成服务,而不被authentication是合法的,用户接受(而不是要求)。 不过,我有两个问题:

  1. 在大多数情况下, <SECURITY_TOKEN>甚至<private_server_ip>都不能向外界透露。
  2. 在某些情况下,即使公开的<SECURITY_TOKEN>是可以接受的,但它不起作用,因为有些网站(如GitHub的降价)忽略了<AUTH>@<SERVER>语法,并且在调用url时不传递<AUTH>

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

没有其他方式提供安全令牌。

我想实现的

我想提供指导,帮助人们在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?
  • 你能帮我么?
  • 你能给我提供一个示例简约configuration吗?

在此先感谢您的帮助! (我很乐意列出帮助我解决这个问题的人,作为项目的贡献者)

最好的祝福,

米歇尔