在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的帐户(这是否有道理?)