Golang Google Drive OAuth2不返回刷新令牌



我能够通过OAuth过程来获得一个令牌,我可以成功使用该程序来与GDRIVE进行交互。令牌具有访问性但没有刷新。我如何获得刷新?

这在Web服务中。这是启动OAuth授权过程的代码:

// 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参数:

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

令牌包含一个访问权限,但没有刷新。它工作了一个小时(到期的长度),但随后停止工作。

问题不在代码上,如果您以前从未经历过授权过程,则代码有效。如果您第二次完成授权过程,则会发生问题。您没有向您显示所要求的特权,并且未发送刷新令牌。您必须强制再次显示特权对话框。为此,将approval_prompt=force添加到重定向URL。

最新更新