谷歌OAuth令牌交换返回无效代码

13

我一直在实现Google网页服务器OAuth流程,但是当我试图用授权码交换访问令牌时,它总是报“invalid_code”的错误。

以下是问题所在:

步骤1:

将我们的某个页面重定向到'https://accounts.google.com/o/oauth2/auth?scope=email&redirect_uri=https%3A%2F%2Fmyurl.com%2Fcallback&response_type=code&client_id=some_client_id'

步骤2:

重定向发生,并且谷歌会重定向到我们的URL https://myurl.com/callback?code=somecode

步骤3:

curl -X POST --data "code=somecode&client_id=some_client_id&some_client_secret=some_client_secret&redirect_uri=https://myurl.com/callback&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token -v --trace-ascii /dev/stout

响应如下:

HTTP 400 Bad request

{ "error" : "invalid_grant", "error_description" : "无效的授权码。" }

有人能帮我解决这个问题吗?谢谢!

2个回答

14

授权码的生命周期仅为10分钟,且只能使用一次。因此,请执行以下检查:

  1. 您是否在10分钟后使用?如果是,请在10分钟内使用。
  2. 您之前是否已经使用过它?如果是,请获取一个新的并使用它。
  3. 您的服务器时间与Google OAuth服务器时间同步吗?如果没有,请更改您的时间。

2
结果是2号。感谢您的回复! - oldmanwiggins

2

我一直在使用http://localhost:8080作为我的重定向URL,因为我只是在尝试他们的示例。而我的JSON文件内容如下:

"redirect_uris": [
  "http://localhost:8080"
],
"javascript_origins": [
  "http://localhost:8080"
]

在开发者控制台中,我将redirect_uri设置为“http://localhost:8080”,但仍然收到相同的错误。我将其更改为“http://localhost:8080/”,然后它开始正常工作(实质上是在末尾添加了一个“/”)。
希望这能帮到你!

你没有注意到末尾的 '/' 吗?我知道这听起来很疯狂,但对我来说确实有效。 - nitarshs
显然不是。可能最好再解释一下,就像你刚才做的那样……因为这确实是你试图传达的重要方面。 - Marc Tamsky
1
没问题。我添加了一行。谢谢! - nitarshs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接