2017-09-28 6 views
0

私はGolangアプリケーションで作業していますが、これはOauth2サービスに接続されています。今はリフレッシュトークンがあり、新しいアクセストークンを取得する必要があります。golang.org/x/oauth2それが成功したwans't、私は行方不明です何かがあります、現在私が持っている:Golang 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 
を持っています

また、作成時にどのURLを確立するべきかわからないhttp.NewRequestはコールバックである必要がありますか?またはOauth2サーバーのURL?

がいいだろう、このライブラリを使用してアクセストークンを更新する方法のいくつかの例がありますが、現時点では、私はそれが

答えて

1

通常あなたは自分の古いトークンを使用し発見していないと、それはの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) 
関連する問題