Nginx - Forward HTTP AUTH - Usuário?

13

Estou com alguns problemas com Nginx e Jenkins (Hudson). Estou tentando usar o Nginx como proxy reverso para a instância do Jenkins com autenticação básica HTTP.

Funciona até agora, mas não tenho idéia de como passar o cabeçalho com o nome de usuário de autenticação?

location / {
  auth_basic "Restricted";
  auth_basic_user_file /usr/share/nginx/.htpasswd;
  sendfile off;

  proxy_pass         http://192.168.178.102:8080;
  proxy_redirect     default;
  proxy_set_header   Host             $http_host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_set_header   X-Forwarded-User $http_authorization; 
  proxy_max_temp_file_size 0;

  #this is the maximum upload size
  client_max_body_size       10m;
  client_body_buffer_size    128k;

  proxy_connect_timeout      90;
  proxy_send_timeout         90;
  proxy_read_timeout         90;             
  proxy_buffer_size          4k;
  proxy_buffers              4 32k;
  proxy_busy_buffers_size    64k;
  proxy_temp_file_write_size 64k;

}

opHASnoNAME
fonte
1
Note que você provavelmente quer um 'd' extra em "Usuário X-Forwared".
Paul

Respostas:

16

Tente adicionar essas diretivas ao seu bloco de localização

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;
Andrei Mikhaltsov
fonte
Este cabeçalho está passando: Nome de usuário: YXJuZTpraWxsZXI básico, não o nome correto de http auth (;
opHASnoNAME
6
Isso deve ser base64 codificado corda en.wikipedia.org/wiki/Basic_access_authentication#cite_note-8 tentar decodificá-lo
Andrei Mikhaltsov
Cabeçalho de autorização deve ser cabeçalho codificado em base64, sim. Mas não é disso que se trata. A questão é sobre passar o nome de usuário de autenticação nos cabeçalhos, não no cabeçalho da autorização completa.
Olli
1
YXJuZTpraWxsZXIdecodifica para arne:killer- bom exemplo @opHASnoNAME :-)
Enda Farrell
pass_header e set_header ...? isso não é duas vezes mais ou menos o mesmo efeito? Ambos devem funcionar, não deveriam?
phip1611
6

Para que isso funcione com o plugin de autenticação de proxy reverso Jenkins:

proxy_set_header Authorization "";
proxy_set_header X-Forwarded-User $remote_user;

Se você não redefinir o Authorizationcabeçalho, o nginx o encaminhará por padrão e, ao ativar o plug-in de autenticação de proxy reverso, Jenkins (jetty) tentará autenticar novamente o usuário e falhará.

nginx versão 1.12.1, Jenkins 2.113.

Olli
fonte
OBRIGADO! Era exatamente isso que eu estava procurando. Muito apreciado.
precisa saber é o seguinte