尝试刷新访问令牌时出现 Google Oauth2 invalid_grant 错误

时间:2021-06-29 11:47:26

标签: curl google-api google-oauth google-authentication

场景

我正在尝试使用提供的刷新令牌生成 Google OAuth2 访问令牌。刷新令牌是从客户端Javascript SDK中获取的,使用以下答案中提到的离线访问方法:
https://stackoverflow.com/a/49842793/16341841

获得的刷新令牌发送到后端服务器,后端服务器在需要时尝试使用此刷新令牌获取新的访问令牌。 API 端点以及用于相同的请求参数是:

curl --location --request POST 'https://oauth2.googleapis.com/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=<my_client_id> \
--data-urlencode 'client_secret=<my_client_secret>' \
--data-urlencode 'refresh_token=<refresh_token_sent_by_frontend>' \
--data-urlencode 'grant_type=refresh_token'

结果(错误)

我收到以下错误:

{
    "error": "invalid_grant",
    "error_description": "Bad Request"
}

我已经尝试过的

我已经尝试了以下链接中提到的所有适用(实际上是所有)解决方案以及答案中提到的内部链接:
invalid_grant trying to get oAuth token from google

注意事项

  1. 前端和后端的客户端 ID 和客户端密钥完全相同。
  2. 每当我使用 OAuth2 API 通过 Postman 生成刷新令牌时,使用上述相同请求进行令牌刷新时,我根本不会遇到任何问题。所以我假设我在后端正确地进行了令牌刷新。

我还可能遗漏什么?非常感谢这里的帮助。

1 个答案:

答案 0 :(得分:1)

您构建的请求错误。它是一个 url 字符串。

curl \
--request POST \
--data 'client_id=[Application Client Id]&client_secret=[Application Client Secret]&refresh_token=[Refresh token granted by second step]&grant_type=refresh_token' \
https://accounts.google.com/o/oauth2/token

Understanding Google OAuth 2.0 with curl