我使用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=CLIENTID&client_secret=CLIENTSECRET&type=web_server&code=4%2F3gbiESZTEOjiyFPLUhKfE_a_jr8Q
注意:我试图将approval_prompt=force
从similar question添加到request-post_body,但这导致了错误
{ statusCode: 400, data: '{\n "error" : "invalid_request"\n}' }
2条答案
按热度按时间4xrmg8kj1#
注意:我试图将类似问题的approval_prompt=force添加到request-post_body中,但这导致了一个错误
请求token时不需要
approval_prompt
参数,approval_prompt 参数是授权部分。我缺少刷新令牌...
你不会获得 refresh_token 的唯一方法是:
试着添加:
access_type=offline
,到授权码请求。编辑:
即:
如果你得到
400
是因为你添加了一个无效的参数或缺少一个。祝你好运!
goucqfw62#
有一次我这样做是在测试-我已经从应用程序中删除了谷歌授权令牌-所以它试图获得另一个,它做到了,但没有刷新令牌。
所以检查一下你正在测试的应用程序没有被你正在测试的帐户授权(这有意义吗?)