使用 Golang Oauth2 库更新访问令牌
Renew Access Token using Golang Oauth2 library
我在 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)
}
但是我得到了 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
此外,我不太确定在创建 http.NewRequest
时应该建立哪个 URL 应该是回调?或 Oauth2 服务器的 url?
如果有一些关于如何使用这个库更新访问令牌的例子就好了,但目前我还没有找到它
通常您只使用旧令牌,它会由 oauth2 库隐式刷新。
示例:
在下面的代码中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)
我在 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)
}
但是我得到了 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
此外,我不太确定在创建 http.NewRequest
时应该建立哪个 URL 应该是回调?或 Oauth2 服务器的 url?
如果有一些关于如何使用这个库更新访问令牌的例子就好了,但目前我还没有找到它
通常您只使用旧令牌,它会由 oauth2 库隐式刷新。
示例:
在下面的代码中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)