Google OAuth“错误”:“invalid_grant”响应请求交换刷新和访问令牌的一次性授权码

Tig*_*ran 2 oauth-2.0 google-oauth google-signin

我正在尝试使用此文档为我们的服务器端应用程序实施 Google Signin: Google Sign-In for server-side apps

我成功地遵循了步骤 1-6,并且能够获得一次性验证码。但是,在第 7 步,当我请求交换访问令牌的一次性验证码时,我得到了响应:

{
  "error": "invalid_grant",
  "error_description": "Bad Request"
}
Run Code Online (Sandbox Code Playgroud)

我尝试了使用 CURL 的手动 HTTP POST 请求,还尝试了官方 api 客户端 Python 库。响应总是相同的“ invalid_grant”。

在请求一次性验证码时,我确保请求离线访问模式。

我通过转到https://myaccount.google.com/u/0/permissions并确保我们的应用程序列在“第三方应用程序具有帐户访问权限”具有正确的访问范围。

你能就如何调试这个问题提出建议吗?不幸的是,错误消息没有帮助,我已经尝试了所有可以找到的有关堆栈溢出或其他地方的特定错误的方法。

更新:我想出了问题所在。显然一次性代码只适用于一个请求,无论请求是否成功。所以,我试图获取刷新令牌,因为我的第一次尝试格式错误,请求失败,并且第一次失败使一次性代码无效。任何后续请求,即使是正确形成的请求,使用相同的代码都会失败并显示“invalid_grant”。这是有点出乎意料的行为,我的印象是“一次”意味着一次成功的尝试。希望这对其他人有帮助。I with OAuth 请求返回更多信息性错误消息以帮助调试。

Tig*_*ran 6

我想出了问题所在。显然一次性代码只适用于一个请求,无论请求是否成功。所以,我试图获取刷新令牌,因为我的第一次尝试格式错误,请求失败,并且第一次失败使一次性代码无效。任何后续请求,即使是正确形成的请求,使用相同的代码都会失败并显示“invalid_grant”。这是有点出乎意料的行为,我的印象是“一次”意味着一次成功的尝试。希望这对其他人有帮助。I with OAuth 请求返回更多信息性错误消息以帮助调试。