У прамым праксі на 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 для крыніцы. Калі ёсць вышэйшы бацькоўскі праксі, яму патрэбна ўласная наўмысная схема аўтэнтыфікацыі, а не выпадковае атрыманне гэтых уліковых даных кліента.

Падобныя артыкулы