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