In een Go-forwardproxy leest r.BasicAuth de header Authorization, die bij de login van de bestemmingswebsite hoort. De eigen inloggegevens van de proxy komen binnen in Proxy-Authorization.

Een kleine adapter kan de openbare parser hergebruiken zonder het oorspronkelijke verzoek te wijzigen:

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

Dit fragment gebruikt net/http. Het geeft de geparseerde waarden en een succesvlag voor het parsen terug; het authenticeert het account niet. Geef het resultaat door aan de bedoelde validator voor inloggegevens van de proxy.

Als de authenticatie mislukt, retourneer 407 met een passende Proxy-Authenticate-uitdaging en stop de verwerking van dat verzoek. Authenticeer voordat je een verbinding naar de bestemming opent of een CONNECT-tunnel accepteert.

Verbruik na het accepteren van de inloggegevens de eigen Proxy-Authorization-header van de proxy vóór de gewone doorsturing. Behoud het oorspronkelijke Authorization-veld voor de oorsprong. Een bovenliggende ouderproxy, indien aanwezig, heeft zijn eigen bewuste authenticatieregeling nodig in plaats van deze clientgegevens per ongeluk te ontvangen.

Gerelateerde artikelen