gpt4 book ai didi

google-api - 谷歌 OAuth : "invalid_grant" still a thing

转载 作者:行者123 更新时间:2023-12-05 06:27:43 25 4
gpt4 key购买 nike

在我的 Node/Express 应用程序中让 Google OAuth2 流程运行时,我已经被困了几个小时。基础知识相当简单:

  1. 创建 Google 应用凭据
  2. 将用户重定向到同意屏幕
  3. 接收一个代码
  4. code 换成 access_tokenrefresh_token
  5. 为将来存储refresh_token

无论出于何种原因,我都无法通过上面的第 4 步,并且总是得到以下响应:

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

有很多其他解决方案询问上述问题,但还没有解决方案对我有用:

  • 无论结果如何,都不要使用相同的代码
  • 添加新的授权重定向 URI 后请稍等
  • 包括 http://localhost:3000 作为授权重定向 URI
  • 包括所有带/不带协议(protocol)、端口、尾部斜杠的变体
  • 如果需要(确实如此),请预先将access_type 设置为offline
  • 使用 Request 代替 Axios
  • 像 OAuth Playground 一样包含一个空的 scope 参数
  • 使用查询字符串对参数进行编码
  • 确认 application/x-www-urlencoded 是 Content-Type
  • 重试时退出所有 Google 帐户
  • 了解 Google 的 token 创建限制

综上所述,以下是我的困境的具体情况:

主机:http://localhost:3000

回调 #1:http://localhost:3000/auth/google/callback (发送 代码 并运行下面的交换操作)

回调#2:http://localhost:3000/auth/google/callbacktwo (应该返回 access_tokenrefresh_token)

交换操作:针对请求模块进行了调整

{
method: 'POST',
uri: 'https://www.googleapis.com/oauth2/v4/token',
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
body: {
'code': req.query.code,
'redirect_uri': 'http://localhost:3000/auth/google/callbacktwo',
'client_id': '***.apps.googleusercontent.com',
'client_secret': '***',
'scope': null,
'grant_type': 'authorization_code'
}
}

授权的重定向 URI:在 Application > Credentials > OAuth 2.0 client IDs 中可见

See screenshot


总而言之,我被困住了。我的设置/方法存在根本性错误,或者我是第一个遇到此错误的开发人员(后者不可能是真的)。也可以支付援助费用。

最佳答案

在一个令人震惊的事件转折中,我在上面发布后的几分钟内解决了这个问题,并进行了以下更改:


改变#1

Added 'http://127.0.0.1' variants to my Authorized Redirect URIs list

因为“127.0.0.1”等同于“本地主机”,所以我想试试看。在别处阅读。


改变#2

Changed the Exchange Action's redirect_uri to Callback #1, which is where the code was sent.

我想“如果 Google 不喜欢 redirect URI 不是它发送 code 的地方怎么办?”。


改变#3

Removed the Exchange Action's scope parameter

虽然它在 OAuth Playground 中清晰可见,但它不在文档中。


结果呢?收到了我找了好几个小时的东西:

{
"access_token": "****",
"expires_in": 3600,
"refresh_token": "***",
"scope": "https://www.googleapis.com/auth/userinfo.profile",
"token_type": "Bearer",
"id_token": "*****"
}

免责声明:这并不意味着以上内容对您有用,但对我有用,我会接受。

关于google-api - 谷歌 OAuth : "invalid_grant" still a thing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55066252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com