Google oauth使用js api获取refresh_token

时间:2014-05-02 14:16:32

标签: oauth-2.0 google-plus google-oauth

我的应用需要使用Google Plus注册用户,然后显示用户的个人资料数据。当用户在Google Plus上编辑他们的个人资料并再次访问我的应用程序时,该应用程序需要显示更新的数据。因此,应用程序需要存储access_token和refresh_token以供将来使用。我想使用google的js api管理所有这些,而不需要任何服务器端google-api-client。

问题是我无法使用js api检索refresh_token。我已经设置了一个jsfiddle here。谷歌加相关代码如下:

$('#signInButton').click(function () {
  attributes = {
    'accesstype': 'offline',
    'clientid': "260932337012-1gdbsh3p7oknkjmeaa7m9q7e6nhhgd9c.apps.googleusercontent.com",
    'scope': 'email profile',
    'cookiepolicy': 'single_host_origin',
    'approvalprompt': 'force',
    'callback': signInCallback
  };

  gapi.auth.signIn(attributes);
});

function signInCallback(authResult) {
  alert(authResult.request_token);
}

尽管将accessstype设置为offline,但不会返回refresh_token。我在这里做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用基于javascript浏览器的应用程序纯粹使用客户端流程来获取刷新令牌是不可能的。使用implicit授权类型的OAuth 2.0时,这是一项安全功能。

刷新令牌仅用于服务器端或混合流。

只使用javascript,您只需再次登录用户,或者如果他们尚未退出,您可以使用'immediate': true参数在后台对其进行身份验证,即不使用其他UI弹出窗口进行身份验证