ホームページ  >  記事  >  バックエンド開発  >  リダイレクトが発生すると Go で基本 HTTP 認証が失敗するのはなぜですか?

リダイレクトが発生すると Go で基本 HTTP 認証が失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-21 04:46:17328ブラウズ

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
}

この関数により、リダイレクト中に認可ヘッダーが追加され、認証が効果的に維持されます。 credentials.

実装:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。