Google Oauth 没有获得刷新令牌

Posted

技术标签:

【中文标题】Google Oauth 没有获得刷新令牌【英文标题】:Google Oauth not getting refresh token 【发布时间】:2015-07-03 17:30:19 【问题描述】:

我正在尝试获取刷新令牌。 我在谷歌文档中读到了它。 现在,我正在离线使用 accesstype 并且还使用approval_prompt:“force” 但我没有得到刷新令牌作为回应。 我不明白我做错了什么。

我有以下 html 代码:

<input type="submit" class="btn btn-info" value="Google" onclick="authorizeWithGoogle()" />

javascript 代码:

 var cid = 'XXXXX';
 var apik = 'XXXXX';
 var scopes = 'https://www.google.com/m8/feeds';

 function authorizeWithGoogle() 
     gapi.client.setApiKey(apik); 
     gapi.auth.authorize( client_id: cid, scope: scopes,  accesstype: "offline"   ,approval_prompt: "force", handleAuthResult);
 

 function handleAuthResult(authResult) 
     delete authResult['g-oauth-window'];
 if (authResult && !authResult.error) 
    console.log(JSON.stringify(authResult));      
 

你能帮帮我吗?

【问题讨论】:

看看这个,也许这可以帮助***.com/questions/8942340/… 【参考方案1】:

您不希望请求刷新令牌,因为这会否定 OAuth 的安全性。刷新令牌应该只被请求/存储在服务器上。在继续之前,您可能想退后一步,回顾一下您对 OAuth 的理解。尝试在不了解 OAuth 的情况下实现 OAuth 是一个皮塔。

对于浏览器客户端,只要您需要新的访问令牌(例如,大约每小时一次),您就应该简单地继续调用 gapi.auth.authorize。第一次通话后,您可以设置immediate=true,这将抑制任何用户界面。

【讨论】:

感谢您的回复。我再次阅读,是的,我必须从服务器请求中获取刷新令牌。道歉。【参考方案2】:

首先,你打错了,它缺少下划线:它是access_type,而不是accesstype

然后,除了通过access_typeapproval_prompt,您还需要确保您的测试用户删除了您的应用程序的授权。使用您的测试帐户(而不是您的应用帐户)登录 Google,然后转到 Account Permissions 并从列表中删除您的应用。

【讨论】:

如果我更改为 access_type 它会给我错误。 access_type '离线'不允许 response_type 令牌 您需要在请求授权码时传递access_typeapproval_prompt,而不是在令牌请求期间(即当response_typecode 时)。

以上是关于Google Oauth 没有获得刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

了解 Google OAuth2 刷新令牌

无法在 PHP 中刷新 OAuth2 令牌,授权无效

google oauth2 刷新令牌何时过期?

即使访问令牌有效,也无法使用刷新令牌刷新 Google OAuth2 的访问令牌

Google OAuth - 访问令牌和刷新令牌之间的区别 [重复]

使用 OAuth 刷新令牌获取新的访问令牌 - Google API