【问题标题】:Bad Request when fetching id token from Google从 Google 获取 id 令牌时出现错误请求
【发布时间】:2021-09-16 09:22:11
【问题描述】:

这可能是一个新手问题(我之前没有使用过fetch api),但我无法弄清楚我的请求有什么问题。

fetch('https://securetoken.googleapis.com/v1/token?key=' + API_KEY, {
  method: 'POST',
  headers: {'Content-Type': 'application/x-www-form-urlencoded'},
  body: 'grant_type=refresh_token&refresh_token=' + refreshToken
})
.then(response => console.log(response))
.catch(error => console.error(error))

我正在尝试按照 here 的指导原则将刷新令牌换成 id 令牌,但由于某种原因,我收到了 Bad Request 响应...

Response { type: "cors", url: "https://securetoken.googleapis.com/v1/token?key=[API_KEY]", redirected: false, status: 400, ok: false, statusText: "Bad Request", headers: Headers, body: ReadableStream, bodyUsed: false }

我的key 是正确的,refreshToken 也直接来自 Firebase SDK 上服务的响应。

我的错误到底在哪里?

更新

  1. 显示在 Next.js 应用程序中执行 fetch 的上下文:
  2. 我正在使用 Firebase 模拟器在 dev (localhost) 中运行此代码。
  3. 我设法找到了声明 { code: 400, message: "INVALID_REFRESH_TOKEN", status: "INVALID_ARGUMENT" } 的其他错误日志。

所以,这似乎确实是 refresh_token 的问题。可能是因为它是由 Firebase Emulators 发出的吗?

useEffect(() => {

  return firebase.auth().onIdTokenChanged(async user => {

    if (user) {

      fetch('https://securetoken.googleapis.com/v1/token?key=' + process.env.NEXT_PUBLIC_FIREBASE_API_KEY, {
        method: 'POST',
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        body: 'grant_type=refresh_token&refresh_token=' + user.refreshToken
      })
      .then(response => console.log(response))
      .catch(error => console.error(error))
    }
  })
}, [])

【问题讨论】:

  • 乍一看似乎很奇怪的是错误返回url: "https://securetoken.googleapis.com/v1/token?key=API_KEY"而不是url: "https://securetoken.googleapis.com/v1/token?key=[THE_REAL_API_KEY_VALUE]"。写问题之前你自己改了吗?
  • 对不起,只是我这样编辑了真正的密钥...现在将其更改为[API_KEY]以使其更清晰。
  • “refreshToken 也直接来自 Firebase SDK 上服务的响应。” => 你能提供更多细节吗?您具体调用哪种 SDK 方法?
  • firabase.auth().onIdTokenChanged(user => { const {refreshToken} = user })
  • 是的,这很可能是原因

标签: javascript firebase google-api fetch token


【解决方案1】:

最终导致问题的原因是使用Firebase Emulators时发出的refreshToken在交换idToken时无效。

这是一个非常极端的案例,但也许有人会觉得这很有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 2016-12-08
    • 1970-01-01
    • 2018-10-28
    • 2014-02-15
    • 1970-01-01
    • 2021-03-22
    • 2016-10-03
    相关资源
    最近更新 更多