代码之家  ›  专栏  ›  技术社区  ›  Sredny M Casanova

使用Golang Oauth2库更新访问令牌

  •  4
  • Sredny M Casanova  · 技术社区  · 7 年前

    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)
        }
    

    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
    

    此外,我真的不确定在创建 http.NewRequest 应该是回拨吗?或者Oauth2服务器的url?

    1 回复  |  直到 7 年前
        1
  •  24
  •   hypnoglow    7 年前

    例子:

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

    假设我用代码交换令牌(首次身份验证):

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

    现在我有了我的令牌,我可以用它发出请求。

    稍后,在使用令牌之前,如果需要,我让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)