Dans un proxy direct Go, r.BasicAuth lit l'en-tête Authorization, qui appartient à la connexion du site web de destination. Les identifiants du proxy lui-même arrivent dans Proxy-Authorization.

Un petit adaptateur peut réutiliser l'analyseur public sans modifier la requête d'origine :

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

Cet extrait utilise net/http. Il renvoie les valeurs analysées et un indicateur de réussite de l'analyse ; il n'authentifie pas le compte. Transmettez le résultat au validateur d'identifiants prévu par le proxy.

Si l'authentification échoue, renvoyez 407 avec un défi Proxy-Authenticate approprié et arrêtez le traitement de cette requête. Authentifiez-vous avant d'ouvrir une connexion vers la destination ou d'accepter un tunnel CONNECT.

Après avoir accepté les identifiants, consommez l'en-tête Proxy-Authorization du proxy lui-même avant le transfert habituel. Conservez le champ Authorization d'origine pour l'origine. Un proxy parent en amont, s'il existe, a besoin de sa propre configuration d'authentification délibérée plutôt que de recevoir par accident cet identifiant client.

Articles similaires