Contexto
Eu escrevi um plug-in de código aberto para uma ferramenta de análise de qualidade de código (opensource) (SonarQube). Este plugin adiciona um conjunto de serviços REST que geram emblemas como imagens SVG. A ferramenta pode ser acessada através de http ou https (dependendo de como ela está instalada).
Os serviços REST que o plug-in está adicionando têm a especificidade de que eles dependem de dados que não são visíveis para usuários não autenticados e que são fornecidos por outros serviços (por exemplo, status de porta de qualidade do projeto, métricas). Assim, eles exigem que o usuário seja autenticado antes de chamar os serviços que fornecem os dados necessários (o que é irrealista, já que o URL deve ser inserido em uma tag <img>
) ou fornecer credenciais no URL da seguinte forma:
http://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service
ou
https://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service
No meu contexto, ser capaz de acessar esses serviços de geração de crachás sem ser autenticado é legítimo e aceito (para não dizer necessário) pelos usuários. No entanto, tenho dois problemas:
<SECURITY_TOKEN>
ou mesmo <private_server_ip>
não podem ser divulgados para o mundo externo. <SECURITY_TOKEN>
seja aceitável, isso não funciona, pois alguns sites (como a marcação do GitHub) ignoram a sintaxe <AUTH>@<SERVER>
e não passam <AUTH>
ao chamar a URL. Não há outra maneira de fornecer o token de segurança.
O que eu quero alcançar
Eu quero fornecer diretrizes para ajudar as pessoas a configurar um proxy reverso HaProxy na frente do SonarQube, que, para cada solicitação enviada para:
http://<public_server_ip>:80/api/xyz_service
... encaminharia para:
http://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service
... ou (se um backend https for usado) o encaminharia para:
https://<SECURITY_TOKEN>@<private_server_ip>:<port>/<context_root>/api/xyz_service
Isso permitiria que as pessoas usassem minha extensão de distintivos (ou qualquer outra extensão) que dependesse de serviços REST seguros, mantendo o token de segurança e o ip interno do servidor secreto (em outras palavras, seria uma solução limpa para o questões acima).
Observe que os parâmetros podem ser fornecidos para os serviços. Até agora, estou usando apenas o método GET HTTP.
Meu pedido
Eu nunca usei HaProxy, então não tenho ideia de como fazer isso, então:
Agradecemos antecipadamente por sua ajuda! (Terei prazer em listar as pessoas que me ajudarão a resolver esse problema como contribuintes do projeto)
Atenciosamente,
Michel
Tags haproxy