Num forward proxy Go, r.BasicAuth lê o cabeçalho Authorization, que pertence ao login do site de destino. As credenciais do próprio proxy chegam em Proxy-Authorization.

Um pequeno adaptador pode reutilizar o analisador público sem alterar o pedido 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. Devolve os valores analisados e um indicador de sucesso da análise; não autentica a conta. Passe o resultado ao validador de credenciais previsto pelo proxy.

Se a autenticação falhar, devolva 407 com um desafio Proxy-Authenticate adequado e interrompa o processamento desse pedido. Autentique antes de abrir uma ligação ao destino ou de aceitar um túnel CONNECT.

Depois de aceitar as credenciais, consuma o cabeçalho Proxy-Authorization do próprio proxy antes do encaminhamento normal. Preserve o campo Authorization original para a origem. Um proxy pai a montante, se existir, precisa da sua própria disposição deliberada de autenticação em vez de receber acidentalmente esta credencial do cliente.

Artigos relacionados