در پروکسی پیشرو 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 را برای مبدأ نگه دارید. پروکسی والد بالادستی، در صورت وجود، به ترتیب احراز هویت آگاهانه خود نیاز دارد نه اینکه این اعتبارنامه کلاینت را تصادفی دریافت کند.

مقالات مرتبط