في وكيل 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 الأصلي للمصدر. وإذا وُجد وكيل أب أعلى في السلسلة، فهو يحتاج ترتيب تحقق خاصًا به عن قصد لا أن يستقبل بيانات اعتماد هذا العميل بالخطأ.

مقالات ذات صلة