2

我正在使用 oauth2(node.js 和connect-oauth库)连接到google 联系人 API 版本 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 } }

post-body '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 添加到request-post_body 但这导致错误

{ statusCode: 400, data: '{\n  "error" : "invalid_request"\n}' }
4

2 回答 2

2

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

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


我错过了刷新令牌...

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

因此,请尝试access_type=offline在授权码请求中添加: , 。

编辑

IE:

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是因为你添加了一个无效的参数或缺少一个。

祝你好运!

于 2012-04-13T16:19:26.687 回答
0

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

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

于 2014-01-13T20:18:15.627 回答