我正在使用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 } }
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'
注意:我尝试将来自similar question的approval_prompt = force添加到request-post_body,但这导致出现错误
{ statusCode: 400, data: '{\n "error" : "invalid_request"\n}' }
2 回答
当您要求令牌时,您不需要
approval_prompt
param . * approval_prompt * param用于授权部分 .你没有获得* refresh_token *的唯一方法是:
使用Client-side Applications流程;
在授权代码请求中包含access_type=online param .
因此,尝试添加:
access_type=offline
,授权代码请求 .Edit :
即:
如果您收到
400
是因为您要添加无效参数或缺少参数 .祝好运!
有一次我做了这个测试 - 我已经从应用程序中删除了谷歌授权令牌 - 所以它试图获得另一个,它没有刷新令牌 .
因此,请检查您正在测试的应用程序是否未获得您正在测试的帐户的授权(这有意义吗?)