在 Google Contacts API 3.0 版上使用 oauth2 检索刷新令牌

Posted

技术标签:

【中文标题】在 Google Contacts API 3.0 版上使用 oauth2 检索刷新令牌【英文标题】:Retrieving refresh token using oauth2 on Google Contacts API version 3.0 【发布时间】:2012-04-22 15:58:16 【问题描述】:

我正在使用 oauth2(node.js 和 connect-oauth 库)连接到 google contacts API version 3.0。

这样做,我会得到如下响应:

 access_token : "...",
"token_typen": "Bearer",
"expires_in" : 3600,
"id_token": "..." 

我缺少用于在后者过期后立即获取新访问令牌的刷新令牌。

oauth2 的选项

 host: 'accounts.google.com',
  port: 443,
  path: '/o/oauth2/token',
  method: 'POST',
  headers: 
    'Content-Type': 'application/x-www-form-urlencoded',
     Host: 'accounts.google.com',
     'Content-Length': 247  

后正文 'redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&grant_type=authorization_code&client_id=CLIENTID&client_secret=CLIENTSECRET&type=web_server&code=4%2F3gbiESZTEOjiyFPLUhKfE_a_jr8Q'

注意:我尝试将approval_prompt=force 从similar question 添加到request-post_body,但这导致了错误

 statusCode: 400, data: '\n  "error" : "invalid_request"\n' 

【问题讨论】:

【参考方案1】:

注意:我尝试将来自类似问题的approval_prompt=force 添加到request-post_body 中,但这导致了错误

当您请求令牌时,您不需要 approval_prompt 参数。 *approval_prompt* 参数用于授权部分。


我缺少刷新令牌...

您不会获得 *refresh_token* 的唯一方法是:

使用Client-side Applications 流;

在授权码请求中包含access_type=online param。

所以,尝试在授权码请求中添加:access_type=offline

编辑

即:

https://accounts.google.com/o/oauth2/auth?client_id=**your_client_id**&scope=https://www.googleapis.com/auth/plus.me&redirect_uri=http://localhost&response_type=code&access_type=offline

如果您收到 400 是因为您添加了无效参数或缺少参数。

祝你好运!

【讨论】:

感谢您的回答。不幸的是,这也不起作用。我收到一个错误: statusCode: 400, data: ' "error" : "invalid_request"' .【参考方案2】:

有一次我这样做是为了测试——我已经从应用程序中删除了谷歌授权令牌——所以它试图获取另一个授权令牌,但没有刷新令牌。

因此,请检查您正在测试的应用程序是否未授权用于您正在测试的帐户(这有意义吗?)

【讨论】:

Google 只会给你一次刷新令牌。在初始身份验证之后,您只会获得访问令牌。如果您(或您的用户)通过访问 accounts.google.com/b/0/IssuedAuthSubTokens 并从头开始重新启动身份验证序列来删除访问权限,您可以获得新的刷新令牌。

以上是关于在 Google Contacts API 3.0 版上使用 oauth2 检索刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

html Google Contacts API v3 Javascript示例

Google Contacts API - 无法刷新访问令牌

带有 Google JavaScript 客户端库的 Google Contacts API

Google Contacts API v3:如何使用全文查询?

从 Oauth2 Google Contacts API 获取用户信息

通过 OAuth 2.0 和私钥(即服务帐户)访问 Google Contacts Api