使用Golang Oauth2库更新访问令牌

Sre*_*ova 1 go oauth-2.0 oauth2client

我在Golang应用程序中工作,这个连接到Oauth2服务,现在我有刷新令牌,我需要用它获得一个新的访问令牌,我正在使用golang.org/x/oauth2但它不会成功,所以有一些东西,我失踪了,目前我有:

refresh_token := "some_refresh_token"

    var conf = oauth2.Config{
             ClientID:MY_CLIENT,
             ClientSecret:MY_CLIENT_SECRET,
             Scopes:[]string{"refresh_token"},
             RedirectURL:"https://mydomain/callback",
             Endpoint: oauth2.Endpoint{
                AuthURL:"myoauth2Cluster.com/oauth2/auth",
                TokenURL: "myoauth2Cluster.com/oauth2/token",
             },
    }

    t := new (oauth2.Token)
    t.RefreshToken=refresh_token

    myclient := conf.Client(context.Background(),t)

    req, err := http.NewRequest("GET",DontKnowWhichURLhere , nil)

    if err != nil {
        fmt.Println("error:",err.Error())
    }

    mrr, er := myclient.Do(req)

    if(er!=nil){
        fmt.Println(er.Error())
    }else{
        fmt.Println("status code:",mrr.StatusCode)
    }
Run Code Online (Sandbox Code Playgroud)

但我得到404状态,我检查了Oauth2服务器的日志,我有

msg="completed handling request" measure#https://myOauth2Cluster.latency=100648 method=GET remote=xxx.xxx.xx.xxx request="/" status=404 text_status="Not Found" took=100.648µs
Run Code Online (Sandbox Code Playgroud)

另外,我不确定在创建http.NewRequest它应该是回调的时候我应该坚持哪个URL ?或Oauth2服务器的网址?

如果有一些如何使用这个库更新访问令牌的例子会很好,但目前我还没有找到它

hyp*_*low 12

通常,您只需使用旧令牌,它就会被oauth2库隐式刷新.

例:

在下面的代码conf*oauth2.Config.

假设我正在交换令牌的代码(第一次授权):

token, err := conf.Exchange(ctx, code)
if err != nil {
    log.Fatalln(err)
}

SaveToken(token)
Run Code Online (Sandbox Code Playgroud)

现在我有我的令牌,我可以使用它来发出请求.

之后,在我使用令牌之前,如果需要,我让oauth2自动刷新它:

tokenSource := conf.TokenSource(oauth2.NoContext, token)
newToken, err := tokenSource.Token()
if err != nil {
    log.Fatalln(err)
}

if newToken.AccessToken != token.AccessToken {
    SaveToken(newToken)
    log.Println("Saved new token:", newToken.AccessToken)
}

client := oauth2.NewClient(oauth2.NoContext, tokenSource)
resp, err := client.Get(url)
Run Code Online (Sandbox Code Playgroud)