Go에서 기본 HTTP 인증 처리
Go에서 기본 HTTP 인증을 구현할 때 예상치 못한 문제가 발생할 수 있습니다. 이 문서에서는 기본 HTTP 인증을 구현하려고 할 때 발생하는 일반적인 문제에 대해 자세히 설명합니다.
문제: 다음 코드를 실행할 때 "지원되지 않는 프로토콜 체계"라는 오류가 발생합니다.
func basicAuth() string { var username string = "foo" var passwd string = "bar" client := &http.Client{} req, err := http.NewRequest("GET", "mydomain.example", nil) req.SetBasicAuth(username, passwd) resp, err := client.Do(req) if err != nil{ log.Fatal(err) } bodyText, err := ioutil.ReadAll(resp.Body) s := string(bodyText) return s }
원인: 리디렉션이 발생하면 Go-lang은 Authorization 헤더를 포함하여 지정된 모든 헤더를 삭제합니다. 기본 인증으로 설정됩니다.
해결책: 이 문제를 해결하려면 사용자 정의 리디렉션 정책 기능을 구현할 수 있습니다.
func redirectPolicyFunc(req *http.Request, via []*http.Request) error { req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) return nil }
이 기능은 인증 헤더가 리디렉션 중에 다시 추가되어 인증을 효과적으로 보존합니다. 자격 증명.
구현:
func main() { client := &http.Client{ Jar: cookieJar, CheckRedirect: redirectPolicyFunc, } req, err := http.NewRequest("GET", "http://localhost/", nil) req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) resp, err := client.Do(req) }
리디렉션 정책 기능을 활용하면 기본 인증을 위한 Authorization 헤더를 포함하여 지정된 헤더가 리디렉션 전체에서 유지됩니다. 대상서버 인증에 성공했습니다.
위 내용은 리디렉션이 발생할 때 Go에서 기본 HTTP 인증이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!