即使访问令牌有效,也无法使用刷新令牌刷新 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_token
、expires_in
、refresh_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 错误