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

时间:2012-04-10 10:58:43

标签: javascript node.js google-api oauth-2.0 google-contacts

我正在使用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 =客户端ID&安培; client_secret = CLIENTSECRET&安培;键入= web_server&安培;代码= 4%2F3gbiESZTEOjiyFPLUhKfE_a_jr8Q'

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

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

2 个答案:

答案 0 :(得分:2)

  

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

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


  

我错过了刷新令牌......

你没有获得* refresh_token *的唯一方法是:

因此,请尝试将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,则是因为您要添加无效参数或缺少参数。

祝你好运!

答案 1 :(得分:0)

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

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