上下文
我为(开源)代码质量分析工具(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是合法的,用户接受(而不是要求)。 不过,我有两个问题:
<SECURITY_TOKEN>
甚至<private_server_ip>
都不能向外界透露。 <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,所以我不知道如何去做,所以:
在此先感谢您的帮助! (我很乐意列出帮助我解决这个问题的人,作为项目的贡献者)
最好的祝福,
米歇尔