En un proxy directo de Go, r.BasicAuth lee la cabecera Authorization, que pertenece al inicio de sesión del sitio web de destino. Las credenciales del propio proxy llegan en Proxy-Authorization.

Un adaptador pequeño puede reutilizar el analizador público sin modificar la solicitud original:

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

Este fragmento usa net/http. Devuelve los valores analizados y un indicador de análisis correcto; no autentica la cuenta. Pase el resultado al validador de credenciales previsto por el proxy.

Si la autenticación falla, devuelva 407 con un desafío Proxy-Authenticate adecuado y detenga el procesamiento de esa solicitud. Autentique antes de abrir una conexión al destino o de aceptar un túnel CONNECT.

Tras aceptar las credenciales, consuma la cabecera Proxy-Authorization del propio proxy antes del reenvío normal. Conserve el campo Authorization original para el origen. Un proxy padre aguas arriba, si existe, necesita su propia disposición deliberada de autenticación en lugar de recibir por accidente esta credencial del cliente.

Artículos relacionados