我可以使用啥密钥来验证 Facebook 登录生成的 Firebase 身份验证令牌

Posted

技术标签:

【中文标题】我可以使用啥密钥来验证 Facebook 登录生成的 Firebase 身份验证令牌【英文标题】:What key can I use to verify Firebase Auth Tokens generated by Facebook Login我可以使用什么密钥来验证 Facebook 登录生成的 Firebase 身份验证令牌 【发布时间】:2016-07-29 23:08:11 【问题描述】:

我正在使用 Firebase 并使用很棒的 Facebook 身份验证。 Auth 对象包含 facebook 令牌和 Firebase Auth 令牌,我希望使用 FB 令牌对我自己的后端服务进行身份验证,而无需将令牌从服务器发回 FB 以对其进行验证。我期待令牌将使用我自己的 Firebase 机密进行签名,但事实并非如此,我想知道是否有任何方法可以验证从 Firebase 应用程序发送到我的服务器的令牌。 在四处寻找之后,我怀疑可能存在某种嵌套签名位,我似乎找不到任何文档来支持这种怀疑。

感谢您提供有关解决此问题的任何提示。

NB - 我已经可以使用 FB 机密生成我自己的令牌,我可以使用它们来验证用户以允许通过我的服务器登录,然后继续使用身份验证令牌来确认用户的身份发回我的服务器和FB。问题仅在使用第 3 方身份验证令牌(Facebook 登录等)时出现

【问题讨论】:

【参考方案1】:

我从another Stack Overflow question找到了答案。

import urllib, json
from jose import jwt

idtoken = "<id token passed to server from firebase auth>"

target_audience = "<firebase app id>"

certificate_url = 'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com'

response = urllib.urlopen(certificate_url)
certs = response.read()
certs = json.loads(certs)

#will throw error if not valid
user = jwt.decode(idtoken, certs, algorithms='RS256', audience=target_audience)
print user

要传递给 jwt.decode() 的 'secret' 是从 https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com 获得的密钥的 JSON 字典

【讨论】:

太棒了 - 感谢链接和代码 - 将在返回终端时进行审查

以上是关于我可以使用啥密钥来验证 Facebook 登录生成的 Firebase 身份验证令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何为 JWT 生成和访问密钥

有啥方法方便用SecureCRT免密码用ssh登录linux主机。

有啥方法方便用SecureCRT免密码用ssh登录linux主机。

Firebase 身份验证在发布模式下失败

有啥方法方便用SecureCRT免密码用ssh登录linux主机。

无效的密钥哈希。密钥哈希与任何存储的密钥哈希不匹配 facebook android