【问题标题】:Problem exchanging auth code for token, Go OAuth2交换令牌的身份验证代码时出现问题,Go OAuth2
【发布时间】:2020-06-04 19:35:31
【问题描述】:

我在用验证码交换令牌时遇到问题。以前有没有其他人遇到过类似的错误?我对 OAuth2 非常陌生,必须从头开始学习并在几天内应用它,遗憾的是我公司没有人熟悉 OAuth2。

主包

import (
    "fmt"
    "golang.org/x/oauth2"
    "log"
    "math/rand"
    "net/http"
)

var (
    oAuth2Config= &oauth2.Config{
        ClientID:     "<client_id>",
        ClientSecret: "<client_secret>",
        Endpoint: oauth2.Endpoint{
            AuthURL:   "https://oauth2.provider.no/auth",
            TokenURL:  "https://oauth2.provider.no/token",
            AuthStyle: 1,
        },
        RedirectURL: "<redirect_uri>",
        Scopes:      nil,
    }
    resourceServerURL           = "https://api.provider.no"
    resourceServerPathCustomers = "/gapi/v1/customers"
    resourceServerPathCases     = "/gapi/v1/cases"
    resourceServerPathAlarms    = "/gapi/v1/alarms"
    resourceServerPathCIS       = "/gapi/v1/cis"
    // tokenChan                   = make(chan *oauth2.Token) // we could possibly send a token here and continue using it.
    oAuth2State = randomString(14)
)

func randomString(length int) string {
    str := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ0123456789"
    generatedString := make([]rune, length)
    for i := 0; i < len(generatedString); i++ {
        generatedString[i] = rune(str[rand.Intn(len(str))])
    }
    return string(generatedString)
}

func main() {

    http.HandleFunc("/", handleCallback)
    if err := http.ListenAndServe(":8082", nil); err != nil {
        log.Fatal(err)
    }

}

func handleCallback(w http.ResponseWriter, r *http.Request) {
    _ = Auth2Config.AuthCodeURL(oAuth2State)

    if state := r.FormValue("state"); state != OAuth2State {
        fmt.Println("state is not valid")
        return
    }

    token, err := oAuth2Config.Exchange(oauth2.NoContext, r.FormValue("code"))
    if err != nil {
        log.Println(err)
        return
    }

    fmt.Println(token.AccessToken)
}

错误:

    2020/03/16 15:49:30 oauth2: cannot fetch token: 400
Response: {"error_description":"Missing grant_type parameter value","error":"invalid_reques│
t"}  

【问题讨论】:

  • Exchange sets the grant_type parameter correctly。您必须与非标准服务器打交道。
  • @CeriseLimón 感谢您指出这一点,我在测试阶段忘记删除它。但是删除它并不能解决问题。彼得,我也有这个结论,但是公司的开发人员一直告诉我我错了。
  • 不,在此测试阶段我没有其他处理程序,Auth2Config.AuthCodeURL(oAuth2State) 是我在此处发布的代码中留下的错误。 r.FormValue("code") 是授权码。

标签: go oauth-2.0


【解决方案1】:

服务器不是标准的,所以必须定制。

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 2018-10-22
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多