【问题标题】:Firebase ID token - JWT::VerificationError Exception: Signature verification raisedFirebase ID 令牌 - JWT::VerificationError 异常:引发签名验证
【发布时间】:2021-11-02 08:36:14
【问题描述】:

使用库 “firebase_id_token” 在 ruby​​ on rails 中验证 firebase id 令牌。

一旦我使用 google_sign_in 库从前端获取有效令牌并将其发送到后端,它总是提示为 "JWT:: VerificationError(引发签名验证)”。即使我已经在 jwt.io 中签入,在那里我可以看到 payload 和 header 的信息,但无法验证签名。

firebase_id_token.rb

FirebaseIdToken.configure do |config|
  config.project_ids = ["project_id"]
  config.redis = Redis.new(host: "localhost", port: 6379)
end

FirebaseIdToken::Certificates.request

另外,我检查了kid 密钥在此链接上是否有效 https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com

我已经调试代码一个多星期了,请任何人帮忙解决这个问题。

PS:我已经使用有效令牌而不是过期令牌测试了代码。

【问题讨论】:

  • 离开说明:问题在于前端的令牌创建部分,一旦我们更改了它的工作代码。

标签: ruby-on-rails firebase firebase-authentication jwt google-signin


【解决方案1】:

Google 登录返回一个 OAuth2 令牌,据我所知不是 JWT,而且绝对 不是 Firebase ID 令牌。如果您将此 Google 登录令牌传递给后端代码,则当您尝试将其验证为 Firebase ID 令牌时,它会被正确拒绝。

要获取 Firebase ID 令牌,您需要使用 Google 登录令牌(通过调用 signInWithCredential)登录 Firebase,然后将生成的 Firebase ID 令牌传递给您的后端代码。

【讨论】:

  • 我将提供令牌的标头值。它声明类型是 JWT {"alg": "RS256","kid": "2cdabd2075c84142446713e3e44e9d718e7c2db4","typ": "JWT"} 另外,我确定令牌是 Firebase Id 令牌,因为在有效负载中我有这个键值对。 "firebase": {"identities": {"google.com": ["106342823030713405321"],"email": ["humantorch@gmail.com"]}
猜你喜欢
  • 2019-11-01
  • 2021-05-04
  • 2018-05-29
  • 2015-08-27
  • 2021-04-02
  • 2018-06-12
  • 2019-06-14
  • 2017-06-25
  • 2018-11-25
相关资源
最近更新 更多