登录
首页 >  Golang >  Go问答

从 OAuth 请求客户端获取令牌

来源:stackoverflow

时间:2024-04-05 17:18:35 400浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《从 OAuth 请求客户端获取令牌》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我有以下代码,我想从请求中获取令牌,我传递api/clientsecret/clientid

r := fmt.Sprintf("https://tenenat.host.com/oauth/token?grant_type=client_credentials&response_type=token&client_id=%s&client_secret=%s", CI, CS)
req, err := http.NewRequest(http.MethodPost, r, nil)
req.Header.Set("accept", "application/json")
res, err := httpClient.Do(req)
if err != nil {
    fmt.Println(os.Stdout)
    var t OAuthAccessResponse
    if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
        fmt.Println(os.Stdout, "could not parse JSON response: %v", err)
    }
    defer res.Body.Close()
}

运行时出现错误:

http 400 错误请求。

知道我是否遗漏了请求中的某些内容吗?

我无法正确格式化代码:)


解决方案


如果可以避免,您不应在 url 字符串中放置敏感数据,例如客户端机密。它比使用消息正文安全性较低:例如,它可能会在日志和站点流量分析中捕获,最终与第三方共享。

相反,使用 json 正文执行 post:

type tokenrequest struct {
    granttype    string `json:"grant_type"`
    responsetype string `json:"response_type"`
    clientid     string `json:"client_id"`
    clientsecret string `json:"client_secret"`
}
tokenreq := &tokenrequest{
    granttype:    granttype,
    responsetype: responsetype,
    clientid:     clientid,
    clientsecret: clientsecret,
}
body, err := json.marshal(tokenreq)
if err != nil {
    log.errorf("failed to marshal request body: %s", err)
}
req, err := http.newrequest("post", url, bytes.newbuffer(body))
if err != nil {
    log.errorf("failed to create request: %s", err)
}
req.header.set("content-type", "application/json")
req.header.set("accept", "application/json")
res, err := httpclient.do(req)

更新

op 现在收到状态代码 401 响应。 401 未经授权。您可能需要对 api 进行身份验证。例如,如果您有不记名令牌,请在发出请求之前为其添加标头:

req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", bearer))

今天关于《从 OAuth 请求客户端获取令牌》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>