Nginx - HTTP weiterleiten AUTH - Benutzer?

13

Ich habe einige Probleme mit Nginx und Jenkins (Hudson). Ich versuche, Nginx als Reverse Proxy für die Jenkins-Instanz mit HTTP Basic Authentication zu verwenden.

Bisher funktioniert es, aber ich habe keine Ahnung, wie der Header mit dem Authentifizierungs-Benutzernamen übergeben wird.

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
quelle
1
Beachten Sie, dass Sie wahrscheinlich ein zusätzliches 'd' in "X-Forwared-User" wünschen.
Paul

Antworten:

16

Versuchen Sie, diese Anweisungen zu Ihrem Standortblock hinzuzufügen

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;
Andrei Mikhaltsov
quelle
Dieser Header wird übergeben: Benutzername: Basic YXJuZTpraWxsZXI, nicht der richtige Name von http auth (;
opHASnoNAME
6
Dies muss Base64-codierte Zeichenfolge sein en.wikipedia.org/wiki/Basic_access_authentication#cite_note-8 versuchen, es zu decodieren
Andrei Mikhaltsov
Der Autorisierungsheader muss Base64-codiert sein, ja. Aber darum geht es nicht. Die Frage bezieht sich auf die Übergabe des Auth-Benutzernamens in Kopfzeilen und nicht auf den vollständigen Autorisierungskopf.
Olli
1
YXJuZTpraWxsZXIdecodiert zu arne:killer- schönes Beispiel @opHASnoNAME :-)
Enda Farrell
pass_header und set_header ...? ist das nicht zweimal mehr oder weniger der gleiche effekt? Beides sollte funktionieren, nicht wahr?
phip1611
6

Damit dies mit dem Jenkins Reverse Proxy-Auth-Plugin funktioniert:

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

Wenn Sie den AuthorizationHeader nicht zurücksetzen , leitet nginx diesen standardmäßig weiter. Wenn Sie das Reverse-Proxy-Authentifizierungs-Plugin aktivieren, versucht Jenkins (Jetty), den Benutzer erneut zu authentifizieren, und schlägt diesbezüglich fehl.

Nginx Version 1.12.1, Jenkins 2.113.

Olli
quelle
DANKE! Genau das habe ich gesucht. VIEL geschätzt.
Erutan409