Di forward proxy Go, r.BasicAuth membaca header Authorization, yang merupakan milik login situs web tujuan. Kredensial milik proxy sendiri datang dalam Proxy-Authorization.

Adaptor kecil dapat menggunakan kembali parser publik tanpa mengubah permintaan asli:

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

Fragmen ini menggunakan net/http. Fragmen mengembalikan nilai hasil penguraian dan penanda keberhasilan penguraian; fragmen tidak mengautentikasi akun. Teruskan hasilnya ke validator kredensial yang dimaksudkan oleh proxy.

Jika autentikasi gagal, kembalikan 407 dengan tantangan Proxy-Authenticate yang sesuai dan hentikan pemrosesan permintaan itu. Autentikasi sebelum membuka koneksi ke tujuan atau menerima terowongan CONNECT.

Setelah menerima kredensial, pakai header Proxy-Authorization milik proxy sendiri sebelum penerusan biasa. Pertahankan bidang Authorization asli untuk origin. Proxy induk di hulu, jika ada, memerlukan pengaturan autentikasi tersendiri yang disengaja, bukan menerima kredensial klien ini secara tidak sengaja.

Artikel terkait