2017-03-09 14 views
0

oauth手順を実行して、GDriveとやりとりするために正常に使用できるトークンを取得できました。トークンにはAccessTokenがありますが、RefreshTokenはありません。 RefreshTokenはどのように入手できますか?Golang GoogleドライブOauth2がリフレッシュトークンを返さない

これはWebサービス内にあります。ここでのOAuth認証手順を開始するコードは次のとおりです。

token, err = oauthconfig.Exchange(nil, code) 

// Set up a configuration. 
oauthconfig := &oauth2.Config{ 
    ClientID:  XXX, 
    ClientSecret: XXX, 
    RedirectURL: "https://MYDOMAIN/gdrivecb", 
    Scopes:  []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/drive"}, 
    Endpoint: oauth2.Endpoint{ 
     AuthURL: "https://accounts.google.com/o/oauth2/auth", 
     TokenURL: "https://accounts.google.com/o/oauth2/token", 
    }, 
} 
url := oauthconfig.AuthCodeURL(MYSCOPEDATA, oauth2.AccessTypeOffline) 
http.Redirect(w, r, url, http.StatusFound) 

ここで/ gdrivecbは(oauthconfigコードがcode URLパラメータで、前と同じであるが呼び出されたときに呼ばれています関連するコードですこのトークンにはAccessTokenが含まれていますが、RefreshTokenは含まれていません。また、1時間(有効期限の長さ)動作し​​ますが、その後は動作しなくなります。

+0

コードを取得する場合、コードを取得するためにURLに '' access_type = offline''を含める必要があります。コードを取得するためのURLは '' https://accounts.google.com/o/oauth2/v2/auth?response_type = code&client_id = ###&redirect_uri = ### I&scope = ###&access_type = offline''です。詳細情報はhttps://developers.google.com/identity/protocols/OAuth2WebServer – Tanaike

+0

oauth2.AccessTypeOfflineを指定したAuthCodeURL()関数は、 'access_type = offline'をリダイレクトURLに追加しています。 –

+0

すみません、ごめんなさい。 – Tanaike

答えて

0

問題はコードではなく、うんざり以前は承認手続きをしていました。この問題は、認可プロセスを2回目に通過した場合に発生します。特権が表示されず、リフレッシュトークンが送信されません。権限ダイアログを再度表示させる必要があります。これを行うには、approval_prompt=forceをリダイレクトURLに追加します。

関連する問題