Nginx - Reenviar HTTP AUTH - ¿Usuario?

13

Tengo algunos problemas con Nginx y Jenkins (Hudson). Estoy tratando de usar Nginx como proxy inverso para la instancia de Jenkins con autenticación básica HTTP.

Funciona hasta ahora, pero no tengo idea de cómo pasar el encabezado con el nombre de usuario de autenticación.

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
fuente
1
Tenga en cuenta que probablemente desee una 'd' adicional en "X-Forwared-User".
Paul

Respuestas:

16

Intente agregar estas directivas a su bloque de ubicación

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;
Andrei Mikhaltsov
fuente
Este encabezado está pasando: Nombre de usuario: YXJuZTpraWxsZXI básico, no el nombre correcto de http auth (;
opHASnoNAME
66
Esta debe ser una cadena codificada en base64 en.wikipedia.org/wiki/Basic_access_authentication#cite_note-8 intenta decodificarla
Andrei Mikhaltsov
El encabezado de autorización debe ser encabezado codificado en base64, sí. Pero de eso no se trata la pregunta. La pregunta es sobre pasar el nombre de usuario de autenticación en los encabezados, no el encabezado de autorización completo.
Olli
1
YXJuZTpraWxsZXIdecodifica a arne:killer- buen ejemplo @opHASnoNAME :-)
Enda Farrell
pass_header y set_header ...? ¿No es esto dos veces más o menos el mismo efecto? Ambos deberían funcionar, ¿no?
phip1611
6

Para que esto funcione con el complemento de autenticación de proxy inverso Jenkins:

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

Si no restablece el Authorizationencabezado, nginx lo reenviará de forma predeterminada, y cuando habilite el complemento de autenticación de proxy inverso, Jenkins (jetty) intentará volver a autenticar al usuario, y falla al hacerlo.

nginx versión 1.12.1, Jenkins 2.113.

Olli
fuente
¡GRACIAS! Esto es exactamente lo que estaba buscando. Muy apreciado.
Erutan409