У forward-проксі на 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 для джерела. Вищому батьківському проксі, якщо він є, потрібна власна продумана схема автентифікації, а не випадкове отримання цих клієнтських облікових даних.

Схожі статті