首页  >  文章  >  后端开发  >  在使用基本身份验证进行初始身份验证后,如何在 Go 中对后续 HTTP 请求进行身份验证?

在使用基本身份验证进行初始身份验证后,如何在 Go 中对后续 HTTP 请求进行身份验证?

Barbara Streisand
Barbara Streisand原创
2024-11-14 19:24:02481浏览

How can I authenticate subsequent HTTP requests in Go after an initial authentication using basic auth?

来自 Go 的经过身份验证的 HTTP 客户端请求

考虑以下代码片段:

client := &http.Client{}

/* Authenticate */
req, err := http.NewRequest("GET", "http://164.99.113.32/Authenticate", nil)
req.SetBasicAuth("<username>", "<password>")
resp, err := client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

/* Get Details */
req.URL, _ = url.Parse("http://164.99.113.32/Details")
resp, err = client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

这里的问题是第二个 HTTP 调用失败,出现 401 访问被拒绝错误。

为什么会发生这种情况?

原因是第二个请求不包含会话 cookie在第一次请求期间获得。为了解决这个问题,我们需要创建一个 cookie jar 来存储和跨请求重用 cookie。

type myjar struct {
    jar map[string] []*http.Cookie
}

func (p* myjar) SetCookies(u *url.URL, cookies []*http.Cookie) {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("The cookie being set is : %s\n", cookies)
    p.jar [u.Host] = cookies
}

func (p *myjar) Cookies(u *url.URL) []*http.Cookie {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("Cookie being returned is : %s\n", p.jar[u.Host])
    return p.jar[u.Host]
}

在 main 函数中:

    jar := &myjar{}
    jar.jar = make(map[string] []*http.Cookie)
    client.Jar = jar

进行这些更改后,第二个请求将拥有成功验证身份并从服务器检索详细信息所需的 cookie。

以上是在使用基本身份验证进行初始身份验证后,如何在 Go 中对后续 HTTP 请求进行身份验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn