แยกวิเคราะห์ Proxy-Authorization ใน forward proxy ของ Go
แยกวิเคราะห์ Proxy-Authorization แยกต่างหากใน forward proxy ของ Go โดยคง Authorization header ของต้นทางไว้
ใน forward proxy ของ Go นั้น r.BasicAuth อ่าน Authorization header ซึ่งเป็นของการเข้าสู่ระบบเว็บไซต์ปลายทาง ข้อมูลรับรองของ proxy เองจะมาใน Proxy-Authorization
อะแดปเตอร์เล็ก ๆ สามารถใช้ parser สาธารณะซ้ำได้โดยไม่ต้องแก้ไขคำขอเดิม:
func proxyBasicAuth(r *http.Request) (string, string, bool) {
headers := make(http.Header)
headers.Set("Authorization", r.Header.Get("Proxy-Authorization"))
return (&http.Request{Header: headers}).BasicAuth()
}
ส่วนนี้ใช้ net/http โดยคืนค่าที่แยกวิเคราะห์แล้วและธงความสำเร็จของการแยกวิเคราะห์ แต่ไม่ตรวจสอบยืนยันบัญชี ส่งผลลัพธ์ให้ตัวตรวจสอบข้อมูลรับรองที่ proxy กำหนดไว้
หากการตรวจสอบยืนยันล้มเหลว ให้ส่งคืน 407 พร้อม Proxy-Authenticate challenge ที่เหมาะสม และหยุดประมวลผลคำขอนั้น ตรวจสอบยืนยันก่อนเปิดการเชื่อมต่อไปยังปลายทางหรือรับ CONNECT tunnel
หลังจากรับข้อมูลรับรองแล้ว ให้ใช้ Proxy-Authorization header ของ proxy เองก่อนการส่งต่อตามปกติ รักษาฟิลด์ Authorization เดิมไว้สำหรับต้นทาง หากมี parent proxy อยู่เหนือขึ้นไป มันต้องมีการจัดวางการตรวจสอบยืนยันของตนเองอย่างตั้งใจ ไม่ใช่รับข้อมูลรับรองของไคลเอนต์นี้โดยบังเอิญ