jef*_*ind 7 python jwt firebase firebase-authentication python-jose
我添加了Firebase以允许客户端直接从Web应用程序客户端(浏览器)进行身份验证.我使用的是firebase-web JS软件包,效果很好.我可以在浏览器中看到我收到一个用户对象,其中包含有关用户的信息,包括idToken.
然后我需要在我的服务器后端验证这个用户,这是python django.在Firebase文档中,我找到了我正在尝试做的操作方法,即验证id令牌.
由于他们没有python支持的Firebase sdk,我需要使用第三方解决方案.我发现它在jwt.io网站上列出后,我来到了python-jose包.该示例看起来很简单:
jwt.decode(token, 'secret', algorithms=['RS256'])
Run Code Online (Sandbox Code Playgroud)
这是我第一次使用JWT.我不知道该用什么'secret'.我尝试将我的ID令牌粘贴为token,以及来自Firebase控制台的Web API密钥secret,但出现此错误:
jose.exceptions.JWKError:不支持RSA密钥格式
我也尝试过JWT调试器,它似乎正在正确读取我的大部分id令牌,但是签名验证正在寻找一个公钥和/或私钥,就像'secret'逃避我一样.
我真的不知道如何找到这个秘密,以及如何验证JWT id令牌.在信息火力地堡文档(第三方节)是:
最后,确保ID令牌由与令牌的孩子声明相对应的私钥签名.从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com获取公钥, 并使用JWT库验证签名.使用来自该端点的响应的Cache-Control标头中的max-age值来了解何时刷新公钥.
我已经尝试将整个json blob从googleapis url粘贴到JWT调试器中,但仍然收到"无效签名"警报.我不明白如何使用该公钥.
python-jose应该为这种方法工作吗?如果是这样,我应该用什么秘密?如果没有,有人能指出我正确的方向吗?
谢谢.
我终于在这篇文章中找到了想要的答案:将Python后端从Gitkit迁移到具有python-jose的Firebase-Auth以进行令牌验证
自发布以来,该python-jose软件包已进行了更新,从而为Firebase ID令牌提供了更好的支持。这是一些jose version 1.3.1有关如何使用python解码firebase id令牌的工作代码():
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3012 次 |
| 最近记录: |