【问题标题】:Google OAuth token exchange returns invalid_codeGoogle OAuth 令牌交换返回 invalid_code
【发布时间】:2014-07-23 01:39:15
【问题描述】:

我一直在实现 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 步:

重定向发生,谷歌将重定向到我们的网址 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 错误请求

{ “错误”:“invalid_grant”, "error_description" : "无效代码。" }

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

【问题讨论】:

    标签: oauth google-oauth


    【解决方案1】:

    授权码的有效期只有10分钟,并且只能使用一次。做这些检查:

    1. 你会在 10 分钟后使用它吗?如果是这样,请在 10 分钟内使用它。
    2. 你以前用过吗?如果是这样,请获得一个新的,然后使用它。
    3. 您的服务器时间是否与 Google OAuth 服务器的时间同步?如果没有,请更改您的时间。

    【讨论】:

    • 原来是2号。谢谢你的回复!
    【解决方案2】:

    我使用http://localhost:8080 作为我的重定向网址,因为我只是在尝试他们的示例。我的 json 文件内容是这样的:

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

    在开发者控制台中,我将 redirect_uri 设置为“http://localhost:8080”,但我遇到了同样的错误。我将其更改为“http://localhost:8080/”,然后它开始工作。 (本质上是在末尾添加一个“/”。)

    希望这会有所帮助!

    【讨论】:

    • 你没有注意到末尾的“/”吗?我知道这听起来很疯狂,但它对我有用。
    • 显然不是。可能很好解释,就像你刚才所说的那样,以防万一......因为它确实是你试图沟通的重要方面。
    • 有道理。加了一行。谢谢!
    猜你喜欢
    • 2013-02-06
    • 2019-03-16
    • 2021-11-21
    • 2011-01-19
    • 2013-11-16
    • 2014-05-12
    • 2013-08-17
    • 2018-06-11
    • 2019-10-07
    相关资源
    最近更新 更多