当前位置: 首页 > 知识库问答 >
问题:

Golang Google Drive Oauth2未返回刷新令牌

柳德义
2023-03-14

我可以通过oauth过程获得一个令牌,我可以成功地使用该令牌与GDrive交互。该令牌有AccessToken,但没有RefreshToken。如何获得刷新令牌?

这是在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是codeURL参数:

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

该令牌包含AccessToken,但不包含refreshToken。它工作了一个小时(到期时间),但之后就停止工作了。

共有1个答案

段渊
2023-03-14

问题不在代码上,如果您以前从未经历过授权过程,代码也能正常工作。如果第二次执行授权过程,就会出现问题。不会向您显示所要求的特权,也不会发送刷新令牌。必须强制再次显示特权对话框。为此,将approval_prompt=force添加到重定向URL中。

 类似资料:
  • 我在自己的Web API上使用Oauth2,在Web应用程序上使用ASP.NET C#来使用该API。在我的web应用程序上,我正在进行HttpWebRequests。当我的访问令牌过期时,我调用一个方法“refreshToken”,该方法发出请求以获取新的访问令牌。这工作很好,没有问题...除了我得到的响应包含一个新的刷新令牌???我在等新的访问令牌。我甚至认为在没有再次传递凭据的情况下这是不可

  • 使用我的凭据点击Microsoft band的登录URL后,我被重定向到一个包含访问令牌的URL,但它不返回授权范围的刷新令牌(offline_access)。我们必须对脱机访问的Microsoft帐户进行任何更改吗? 注意:重定向URL中缺少offline_access作用域 登录URL:(获取访问令牌) https://login.live.com/oauth20_desktop.srf?XO

  • 我正在尝试刷新从wso2 identity server获得的访问令牌(基于https://docs.wso2.com/display/IS510/Refresh令牌授权);服务器返回无效的授权类型响应 访问令牌是使用openid范围的“授权代码”授权类型获得的。 我已经打开了服务器上的日志记录;然而,我无法确定无效授权类型响应的原因。如何让WSO2 Identity Server使用刷新令牌刷新

  • 我正在从我的Jenkins点击总线刷新endpoint,我希望该endpoint是安全的。 下面是我的申请。yml公司 下面是我在spring boot中的http配置 现在,当我点击curl时——请求GEThttp://localhost:8080/health我得到如下正确的回答 但是当我点击curl时——请求POSThttp://localhost:8080/bus-刷新 或 我得到403和

  • 我想从谷歌得到访问令牌。Google API表示,要获得访问令牌,将代码和其他参数发送到令牌生成页面,响应将是一个JSON对象,如下所示: 但是,我没有收到刷新令牌。我的答复是:

  • 我有一个使用Microsoft cloud health api的web应用程序,在oauth2循环中一切正常,我第一次获得了access_令牌和refresh_令牌,但当我使用refresh令牌获得新的access_令牌时,我不会再获得refresh令牌。我已经申请了离线访问,我有类似的api,它与微软onedrive连接,运行非常完美。我相信这是我从Microsoft health cloud