我添加了 Firebase 以允许客户端直接从 Web 应用程序客户端(浏览器)进行身份验证。我正在使用firebase-网络JS 包,效果很好。我可以在浏览器中看到我收到一个用户对象,其中包含有关用户的信息,包括idToken
.
然后我需要在我的服务器后端(即 python django)上验证该用户。在 Firebase 文档中,我找到了我正在尝试做的事情的操作方法,即验证 id 令牌.
由于他们没有支持的适用于 python 的 Firebase sdk,因此我需要使用第三方解决方案。我已经来到了python-jose 包在 jwt.io 网站上找到它后。这个例子看起来很简单:
jwt.decode(token, 'secret', algorithms=['RS256'])
这是我第一次使用 JWT。我不知道该用什么'secret'
。我尝试将我的 id 令牌粘贴为token
,以及 Firebase 控制台中的 Web API 密钥secret
,但出现此错误:
jose.exceptions.JWKError:不支持 RSA 密钥格式
我也尝试过JWT 调试器,这似乎正确读取了我的大部分 id 令牌,但签名验证正在寻找公钥和/或私钥,这就像'secret'
正在逃避我。
我真的不知道如何找到这个秘密,以及如何验证 JWT id 令牌。有关信息Firebase 文档(第三方部分)是:
最后,确保ID令牌是由私钥签名的
对应于令牌的孩子声明。从以下位置获取公钥https://www.googleapis.com/robot/v1/metadata/x509/[电子邮件受保护]并使用 JWT 库来验证签名。使用的值
来自该端点的响应的 Cache-Control 标头中的 max-age
知道何时刷新公钥。
我尝试将 googleapis url 中的整个 json blob 粘贴到 JWT 调试器中,但仍然收到“无效签名”警报。我不明白如何使用该公钥。
python-jose 应该适用于这种方法吗?如果是这样,我应该使用什么秘密?如果没有,有人可以指出我正确的方向吗?
Thanks.