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

ttp71kqs  于 2023-04-05  发布在  Go
关注(0)|答案(2)|浏览(159)

我使用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=forcesimilar question添加到request-post_body,但这导致了错误

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

4xrmg8kj1#

注意:我试图将类似问题的approval_prompt=force添加到request-post_body中,但这导致了一个错误
请求token时不需要approval_prompt参数,approval_prompt 参数是授权部分。
我缺少刷新令牌...
你不会获得 refresh_token 的唯一方法是:

  • 使用客户端应用程序流;
  • 在授权码请求中包括access_type=online参数。

试着添加: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是因为你添加了一个无效的参数或缺少一个。
祝你好运!

goucqfw6

goucqfw62#

有一次我这样做是在测试-我已经从应用程序中删除了谷歌授权令牌-所以它试图获得另一个,它做到了,但没有刷新令牌。
所以检查一下你正在测试的应用程序没有被你正在测试的帐户授权(这有意义吗?)

相关问题