Use o HaProxy para adicionar credenciais sob o capô

1

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:

  1. Na maioria dos casos, <SECURITY_TOKEN> ou mesmo <private_server_ip> não podem ser divulgados para o mundo externo.
  2. Em alguns casos, mesmo que a divulgação de <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.
Infelizmente, até agora a equipe de desenvolvimento da SonarQube se recusou a permitir que serviços REST públicos (selecionados) ligassem para serviços privados sem serem autenticados.

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:

  • É possível conseguir o que descrevi com o HaProxy?
  • você pode por favor me ajudar?
  • Você pode me fornecer uma configuração minimalista de amostra?

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

    
por Kraal 15.11.2016 / 15:14

0 respostas

Tags