即使访问令牌有效,也无法使用刷新令牌刷新 Google OAuth2 的访问令牌

Posted

技术标签:

【中文标题】即使访问令牌有效,也无法使用刷新令牌刷新 Google OAuth2 的访问令牌【英文标题】:Can't refresh access token of Google OAuth2 with refresh token even the access token is valid 【发布时间】:2021-12-17 02:10:26 【问题描述】:

我的应用程序通过POST https://oauth2.googleapis.com/token API 获取访问令牌和刷新令牌。 响应包含access_tokenexpires_inrefresh_token。 我可以使用访问令牌调用 gmail API,例如 GET https://gmail.googleapis.com/gmail/v1/users/me/profile API。

但我无法使用刷新令牌刷新访问令牌。

请求

POST https://oauth2.googleapis.com/token

  client_id: <client_id>,
  client_secret: <client_secret>,
  grant_type: "refresh_token",
  refresh_token: <refresh_token>

回应


  error: "unauthorized_client",
  error_description: "Unauthorized"

访问令牌有效但刷新令牌在同一响应中无效,这很奇怪。

并不是每个谷歌账户都会出现这个问题。

谢谢。

【问题讨论】:

developers.google.com/identity/protocols/oauth2 上的“刷新令牌过期”下面的条件之一是否适用于您的情况? @RonaldKorze 刷新令牌过期的错误消息是 Invalid_token not aunauthorzed_client。 【参考方案1】:

unauthorized_client 可能意味着几件事。您的客户端 ID 和客户端密码不匹配。或者您使用的客户端 ID 和客户端密码不是用于创建刷新令牌的客户端 ID 和客户端密码。

但是我可以看到另一个问题,那就是您将数据传递给 post 调用的方式。您应该像 http parms 一样将它们串在一起,它们之间有一个 &。

curl -s \
--request POST \
--data 'client_id=XXXXX&client_secret=XXXXX&refresh_token=XXX&grant_type=refresh_token' \
https://accounts.google.com/o/oauth2/token

How to get a Google access token with CURL.

【讨论】:

以上是关于即使访问令牌有效,也无法使用刷新令牌刷新 Google OAuth2 的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

即使 access_type=offline,OAuth2.0 也无法获取刷新令牌

尝试刷新 googleapis 的访问令牌时出现 invalid_grant 错误

如何防止刷新被盗的访问令牌

刷新令牌时,AuthGuard 服务 canActivate 无法导航

使用访问令牌和刷新令牌来刷新它们

Google OAuth - 访问令牌和刷新令牌之间的区别 [重复]