【问题标题】:Google OAuth "error": "invalid_grant" response to request to exchange one time auth code for refresh and access tokenGoogle OAuth“错误”:“invalid_grant”响应请求交换一次身份验证代码以进行刷新和访问令牌
【发布时间】:2019-04-19 04:42:08
【问题描述】:

我正在尝试使用以下文档为我们的服务器端应用实施 Google 登录: Google Sign-In for server-side apps

我成功执行了第 1-6 步,并获得了一次性验证码。但是,在第 7 步中,当我请求将一次性身份验证代码交换为访问令牌时,我得到了响应:

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

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

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

我通过转到https://myaccount.google.com/u/0/permissions 并确保我们的应用程序以正确的访问权限范围列在“具有帐户访问权限的第三方应用程序”中来验证我为其获取一次性身份验证代码的用户确实已授予访问权限。

你能告诉我如何调试这个吗?不幸的是,错误消息没有帮助,我已经尝试了关于堆栈溢出或其他地方的这个特定错误的所有方法。

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

【问题讨论】:

  • 请编辑您的问题并包含您尝试过的代码。 curl 和 python 都可以。
  • @DaImTo 感谢您的回复,我的问题已解决,请查看更新。
  • 请发布您的更新作为答案。您的问题和解决方案将帮助其他人。

标签: oauth-2.0 google-signin google-oauth


【解决方案1】:

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

【讨论】:

  • 这个周末我刚刚遇到了这个确切的问题。你的答案立刻浮现在脑海中。
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2021-06-10
  • 2017-03-06
  • 2021-07-12
相关资源
最近更新 更多