Nginx - ส่งต่อ HTTP AUTH - ผู้ใช้หรือไม่


13

ฉันมีปัญหากับ Nginx และ Jenkins (ฮัดสัน) ฉันพยายามใช้ Nginx เป็น Reverse Proxy สำหรับอินสแตนซ์ Jenkins ด้วย HTTP Basic Authentication

มันทำงานได้จนถึงตอนนี้ แต่ฉันไม่รู้ว่าจะส่ง Header ด้วยชื่อผู้ใช้รับรองความถูกต้องได้อย่างไร

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
โปรดทราบว่าคุณอาจต้องการ 'd' พิเศษใน "X-Forwared-User"
พอล

คำตอบ:


16

ลองเพิ่มคำสั่งนี้ในบล็อกสถานที่ของคุณ

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;

ส่วนหัวนี้ผ่าน: ชื่อผู้ใช้: พื้นฐาน YXJuZTpraWxsZXI ไม่ใช่ชื่อที่ถูกต้องจาก http auth (;
opHASnoNAME

6
นี้จะต้องเป็นสตริงที่เข้ารหัส base64 en.wikipedia.org/wiki/Basic_access_authentication#cite_note-8พยายามถอดรหัสมัน
Andrei Mikhaltsov

ส่วนหัวการอนุญาตต้องเป็นส่วนหัวที่เข้ารหัสแบบพื้นฐาน 64 แต่นั่นไม่ใช่สิ่งที่เป็นคำถาม คำถามคือเกี่ยวกับการส่งชื่อผู้ใช้รับรองความถูกต้องในส่วนหัวไม่ใช่ส่วนหัวการให้สิทธิ์เต็มรูปแบบ
Olli

1
YXJuZTpraWxsZXIถอดรหัสเป็นarne:killer- ตัวอย่างที่ดี @opHASnoNAME :-)
Enda Farrell

pass_header และ set_header ... ? นี่ไม่ใช่เอฟเฟกต์สองเท่านี้มากหรือน้อย ทั้งสองควรทำงานได้ใช่ไหม
phip1611

6

ในการทำให้สิ่งนี้ทำงานร่วมกับปลั๊กอินการตรวจสอบย้อนกลับพร็อกซีของ Jenkins:

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

หากคุณไม่รีเซ็ตAuthorizationส่วนหัว nginx จะส่งต่อโดยค่าเริ่มต้นและเมื่อเปิดใช้งานปลั๊กอินการรับรองความถูกต้องของพร็อกซีย้อนกลับเจนกินส์ (ท่าเทียบเรือ) จะพยายามรับรองความถูกต้องของผู้ใช้อีกครั้งและล้มเหลว

รุ่น nginx 1.12.1, Jenkins 2.113


ขอบคุณ! นี่คือสิ่งที่ฉันกำลังมองหา ชื่นชมมาก
Erutan409
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.