리디렉션이 발생할 때 Go에서 기본 HTTP 인증이 실패하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-21 04:46:17
원래의
327명이 탐색했습니다.

Why Does Basic HTTP Authentication Fail in Go When Redirects Occur?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿