【问题标题】:Refresh token is not returned after initial authorization初始授权后不返回刷新令牌
【发布时间】:2014-03-26 12:15:18
【问题描述】:

这是对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 在浏览器中”

对我来说不是这样。

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

【问题讨论】:

  • 这是使用 Web 服务器流还是 javascript 客户端流?
  • 这是在一台服务器上完成的。具体来说,我正在使用 opauth 库opauth.org
  • 然后@jay 的回答适用。仅当 (a) 您使用 access_type=offline (b) 用户明确授予它(即初始授予或批准提示 = 强制)时,您才会获得刷新令牌

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


【解决方案1】:

如果设置了 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

【讨论】:

  • 在测试这个时,我正在撤销应用程序的访问权限,并且用户确实通过了身份验证屏幕。但是,我仍然没有得到 refresh_token。
  • 只有设置了 access_type=offline 才能获得刷新令牌。
【解决方案2】:

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

  gapi.auth.getToken().access_token;

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

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

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

谢谢!!

【讨论】:

  • 这是客户端Javascript方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多