Разбор Proxy-Authorization в forward-прокси на Go
Разбирайте Proxy-Authorization отдельно в forward-прокси на Go, сохраняя заголовок Authorization источника.
В 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 для источника. Вышестоящему родительскому прокси, если он есть, нужна собственная продуманная схема аутентификации, а не случайное получение этих клиентских учётных данных.