2014-02-24 59 views
1

这是一个后续质疑Not receiving Google OAuth refresh token刷新令牌初始授权之后,不返回

答案是“refresh_token只提供对来自用户的第一授权。”

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

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

其他建议然而使用access_type=offline,根据描述脱机访问使用,如果:

“应用程序需要访问谷歌的API,当用户不存在 在浏览器“

这不是我的情况。

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

+0

这是使用Web服务器流还是JavaScript客户端流? – pinoyyid

+0

这是一台服务器完成的。具体来说,我使用opauth库http://opauth.org/ –

+0

然后@ jay的答案适用。如果(a)您已经请求了access_type = offline *和*(b)用户特别授予它(即初始授权或approval_prompt = force),则只会获得刷新令牌 – pinoyyid

回答

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

+0

测试此操作时,我正在撤销应用程序的访问权限和用户确实通过认证屏幕。但是,我仍然没有得到refresh_token。 –

+0

如果设置了access_type = offline,则只会获得刷新令牌。 –

1

每次当你重新加载你的应用程序页面,访问令牌被刷新,也可以说为了这个目的,刷新令牌,你应该使用下列但首先需要验证

gapi.auth.getToken().access_token; 

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

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

你可以用这个来避免你的问题“刷新令牌不被返回”。

谢谢!

+0

这是客户端Javascript方式 – TheDean

相关问题