初始授权后不会返回刷新令牌

时间:2014-02-24 17:17:46

标签: oauth-2.0 google-api google-drive-api google-oauth

这是问题Not receiving Google OAuth refresh token

的后续问题

答案是“只有在用户的第一次授权时才提供refresh_token。”

撤销应用程序的权限并尝试再次授权后,不会返回刷新令牌。我得到的是:

{ "access_token" : "XXXX..", "token_type" : "Bearer", "expires_in" : 3600, "id_token" : "XXXX..." }

其他人建议使用access_type=offline但是,根据说明,如果符合以下情况,则使用离线访问:

  

“当用户不在时,应用程序需要访问Google API   在浏览器“

对我来说并非如此。

获取刷新令牌的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

如果设置了access_type = offline,则只获取刷新令牌。您有两种选择如何处理:

  1. 请勿使用access_type=offline。您的访问令牌将持续1小时。访问令牌过期后,重新提示用户再次进行身份验证。他们需要再次进行整个OAuth舞蹈,以便获得新的访问令牌。

  2. 使用access_type=offline以便您get a new access tokens via the refresh token。如果您愿意,在用户退出后,您可以revoke the tokens

答案 1 :(得分:1)

每次当您重新加载应用程序页面时,访问令牌都会刷新,或者您可以为此目的说出刷新令牌,您应该使用以下但首先需要身份验证

  gapi.auth.getToken().access_token;

我也通过以下方式做同样的事情

   var accessToken = gapi.auth.getToken().access_token;
    var xhr = new XMLHttpRequest();
    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);

您可以使用它来避免您的问题“不返回刷新令牌”。

谢谢!!