Eu tenho um sitehttp://blahblah.com Quero adicionar uma página de login antes de qualquer coisahttp://blahblah.com. Eu escrevi um código de login simples em php. O problema é que não consigo modificar o código em blahblah , é algum microsserviço escrito em ferrugem e outras linguagens.
Em login.php, posso redirecionar para blahblah.com conforme necessário. Eu sei que posso forçar o haproxy a redirecionar para my-login.com se as pessoas acessarem blahblah.com e, em my-login.com, eu poderia redirecionar para blahblah.com, mas isso pode acabar em círculos.
Alguém pode me ajudar/dar dicas sobre como deve ser a configuração do haproxy para que isso funcione?
Responder1
HAProxy pode não ser a melhor ferramenta para isso, mas é difícil dizer sem entender melhor sua arquitetura e uso. De qualquer forma, uma das maneiras é utilizar uma map
função para escolher o backend correto.
Verhttps://www.haproxy.com/blog/introduction-to-haproxy-maps/, mas aproximadamente você faria algo como
frontend frontend-blahblah
bind *:443
use_backend %[req.hdr(x-app-auth),map(/mnt/resource/token.map,backend-unauth)]
O arquivo de mapa /mnt/resource/token.map
teria uma lista de chaves de autenticação que cada uma mapeia para o backend-auth
backend (ou seja, blahblah.com). Qualquer pessoa sem uma chave de autenticação é enviada para backend-unauth
(ou seja, seu servidor de login).
Além disso, você precisaria fazer o seguinte:
- O aplicativo teria que enviar o
X-App-Auth
cabeçalho com cada solicitação neste exemplo. Ou altere-o para usar cookies comoreq.cook(APPAUTH)
. - Quando um usuário efetua login ou logout, o arquivo de mapa
/mnt/resource/token.map
precisará ser atualizado pelo seu servidor de login. Consulte o artigo mencionado acima para conhecer diversas maneiras de fazer isso. Talvez o mais fácil seja usarhttp-request set-map
ehttp-request del-map
restringir o acesso ao IP do seu servidor de login, por exemplo, fazer com que o HAProxy escute em uma 'porta de gerenciamento' separada e rejeite solicitações de outros IPs, além de qualquer outra segurança. Por exemplo, seu servidor de login pode fazer uma chamada parahttps://blahblah.com:8443/add-token/123456789... para adicionar uma chave de autenticação. - O servidor de login precisará se encarregar de configurar o cookie/retornar a chave de autenticação ao cliente. Provavelmente há alguns problemas entre sites, o que significa que pode ser necessário algum ajuste no cabeçalho do HAProxy; você já pode ter considerado e resolvido isso.
Tudo isso é um instrumento contundente – um usuário está logado e tem permissão para acessar o site ou não. Não há muita granularidade na diferenciação dos usuários; se você quiser isso, seria melhor colocar seu servidor de login na frente do outro site como proxy.