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;

}


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;

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.


DANKE! Genau das habe ich gesucht. VIEL geschätzt.
Erutan409
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.