在Google Contacts API版本3.0上使用oauth2检索刷新标记

我正在使用oauth2(node.js和connect-oauth库)连接到谷歌联系人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'

注意:我试图从类似的问题向request-post_body添加approval_prompt = force,但是这导致了一个错误

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

注意:我试图从类似的问题向request-post_body添加approval_prompt = force,但是这导致了一个错误

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


我错过了刷新令牌…

你不能得到一个* refresh_token *的唯一方法是:

  • 使用客户端应用程序stream程;

  • 在授权码请求中包含access_type =在线参数 。

因此,请尝试将授权码请求添加到: 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是因为你添加一个无效的参数或缺less一个。

祝你好运!

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

所以检查你正在testing的应用程序没有被授权你正在testing的帐户(这是否有道理?)