Go 포워드 프록시에서 r.BasicAuth는 Authorization 헤더를 읽는데, 이는 대상 웹사이트 로그인에 속합니다. 프록시 자체의 자격 증명은 Proxy-Authorization으로 들어옵니다.

작은 어댑터를 사용하면 원래 요청을 바꾸지 않고 공개 파서를 재사용할 수 있습니다:

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

이 코드 조각은 net/http를 사용합니다. 파싱된 값과 파싱 성공 플래그를 반환하지만 계정을 인증하지는 않습니다. 결과는 프록시가 의도한 자격 증명 검증기로 넘기십시오.

인증이 실패하면 적절한 Proxy-Authenticate 챌린지를 포함한 407을 반환하고 해당 요청 처리를 중단하십시오. 대상에 연결을 열거나 CONNECT 터널을 수락하기 전에 인증하십시오.

자격 증명을 수락한 뒤에는 일반 전달 전에 프록시 자체의 Proxy-Authorization 헤더를 소비하십시오. 원래 Authorization 필드는 대상 서버를 위해 보존하십시오. 상위 부모 프록시가 있다면 이 클라이언트 자격 증명을 우연히 받는 대신 자체적인 의도된 인증 구성을 갖추어야 합니다.

관련 글