haproxy forçando um redirecionamento para login e redirecionamento de volta

haproxy forçando um redirecionamento para login e redirecionamento de volta

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 mapfunçã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.mapteria uma lista de chaves de autenticação que cada uma mapeia para o backend-authbackend (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:

  1. O aplicativo teria que enviar o X-App-Authcabeçalho com cada solicitação neste exemplo. Ou altere-o para usar cookies como req.cook(APPAUTH).
  2. Quando um usuário efetua login ou logout, o arquivo de mapa /mnt/resource/token.mapprecisará 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 usar http-request set-mape http-request del-maprestringir 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.
  3. 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.

informação relacionada