W forward proxy Go r.BasicAuth odczytuje nagłówek Authorization, który należy do logowania w docelowej witrynie. Własne dane uwierzytelniające proxy przychodzą w Proxy-Authorization.

Mały adapter może ponownie użyć publicznego parsera bez zmiany pierwotnego żądania:

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()
}

Ten fragment używa net/http. Zwraca przeanalizowane wartości i flagę powodzenia analizy; nie uwierzytelnia konta. Przekaż wynik zamierzonemu walidatorowi danych uwierzytelniających proxy.

Jeśli uwierzytelnienie się nie powiedzie, zwróć 407 z odpowiednim wyzwaniem Proxy-Authenticate i zatrzymaj przetwarzanie tego żądania. Uwierzytelnij przed otwarciem połączenia z celem lub przyjęciem tunelu CONNECT.

Po przyjęciu danych uwierzytelniających zużyj własny nagłówek Proxy-Authorization proxy przed zwykłym przekazywaniem. Zachowaj pierwotne pole Authorization dla źródła. Nadrzędny proxy, jeśli istnieje, potrzebuje własnego świadomego układu uwierzytelniania, zamiast przypadkowo otrzymać te dane klienta.

Powiązane artykuły