בפרוקסי קדמי של Go, r.BasicAuth קורא את כותרת Authorization, ששייכת לכניסה לאתר היעד. פרטי ההזדהות של הפרוקסי עצמו מגיעים ב-Proxy-Authorization.

מתאם קטן יכול לעשות שימוש חוזר במנתח הציבורי בלי לשנות את הבקשה המקורית:

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. הוא מחזיר את הערכים המנותחים ודגל הצלחה של הניתוח; הוא אינו מאמת את החשבון. העבירו את התוצאה למאמת פרטי ההזדהות המיועד של הפרוקסי.

אם האימות נכשל, החזירו 407 עם אתגר Proxy-Authenticate מתאים והפסיקו לעבד את הבקשה הזו. בצעו אימות לפני פתיחת חיבור ליעד או קבלת מנהרת CONNECT.

לאחר קבלת פרטי ההזדהות, צרכו את כותרת Proxy-Authorization של הפרוקסי עצמו לפני ההעברה הרגילה. שמרו את שדה Authorization המקורי עבור המקור. פרוקסי אב במעלה הזרם, אם קיים, זקוק לסידור אימות מכוון משל עצמו ולא לקבל את פרטי ההזדהות של הלקוח הזה בטעות.

מאמרים קשורים