如何在 Python 中解码 Firebase JWT 令牌

2023-11-27

我添加了 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'正在逃避我。

enter image description here

我真的不知道如何找到这个秘密,以及如何验证 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.


我终于在这篇文章中找到了我正在寻找的答案:使用 python-jose 将 Python 后端从 Gitkit 迁移到 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/[email protected]'

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 中解码 Firebase JWT 令牌 的相关文章

  • 有没有一种方法可以将python对象直接存储在mongoDB中而不需要序列化它们

    我在某处读到过 您可以使用 BSON 将 python 对象 更具体地说是字典 作为二进制文件存储在 MongoDB 中 但是现在我找不到任何与此相关的文档 有人知道具体如何做到这一点吗 没有办法在不序列化的情况下将对象存储在文件 数据库
  • 从 SHAP 值中获取特征重要性

    我想要获得重要功能的数据框 通过下面的代码 我得到了 shap values 但我不确定这些值的含义是什么 在我的 df 中有 142 个特征和 67 个实验 但得到了一个带有 ca 的数组 2500 个值 explainer shap T
  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • TensorFlow:带有轴选项的 bincount

    在 TensorFlow 中 我可以使用 tf bincount 获取数组中每个元素的计数 x tf placeholder tf int32 None freq tf bincount x tf Session run freq feed
  • ctypes 错误:libdc1394 错误:无法初始化 libdc1394

    我正在尝试将程序编译为共享库 我可以使用 ctypes 在 Python 代码中使用该库 使用以下命令该库可以正常编译 g shared Wl soname mylib O3 o mylib so fPIC files pkg config
  • 在 python 3 中使用子进程

    我使用 subprocess 模块在 python 3 中运行 shell 命令 这是我的代码 import subprocess filename somename py in practical i m using a real fil
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • 小部件之间的自定义信号

    尝试将信号从一个 gtk EventBox 子级发送到另一个 在 init HeadMode 第 75 行 上出现错误 类型错误 未知信号名称 消息发送 why usr bin env python coding utf8 import p
  • Python中列表中两个连续元素的平均值

    我有一个偶数个浮点数的列表 2 34 3 45 4 56 1 23 2 34 7 89 我的任务是计算 1 和 2 个元素 3 和 4 5 和 6 等元素的平均值 在 Python 中执行此操作的快捷方法是什么 data 2 34 3 45
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 对使用 importlib.util 导入的对象进行酸洗

    我在使用Python的pickle时遇到了一个问题 我需要通过将文件路径提供给 importlib util 来加载一些 Python 模块 如下所示 import importlib util spec importlib util sp
  • Python Pandas:如何对组中的所有项目进行分组并为其分配 id?

    我有 df domain orgid csyunshu com 108299 dshu com 108299 bbbdshu com 108299 cwakwakmrg com 121303 ckonkatsunet com 121303
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • 以编程方式使用 Sphinx 特定指令解析 .rst 文件

    我希望能够在 Python 中解析基于 sphinx 的 rst 以便进一步处理和检查 就像是 import sphinx p sphinx parse path to file rst do something with p 似乎在 do
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • Python问题:打开和关闭文件返回语法错误

    大家好 我发现了这个有用的 python 脚本 它允许我从网站获取一些天气数据 我将创建一个文件和其中的数据集 有些东西不起作用 它返回此错误 File
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • 在Java中,this.method()和method()有什么区别?

    打电话有什么区别吗this method and method 包括性能差异 唯一重要的是你是否使用OuterClass this method e g class OuterClass void method class InnerCla
  • 将 C# 项目从 Visual Studio 2010 降级到 Visual Studio 2008

    我编写了一个 Visual C 2008 Windows 窗体应用程序 然后我在装有 Visual Studio 2010 的计算机中编辑了代码 但我无法再在 Visual 2008 中运行它 有什么办法可以做到这一点 当你说 无法再运行它
  • 在ggplot2中组合条形图和折线图(双轴)

    I have double y axis图表制作于Excel 在 Excel 中 它只需要基本技能 我想做的是使用复制此图表ggplot2图书馆在R 我已经这样做了 但我需要绘制响应2nd y axis 我附上我使用过的可重现代码 Data
  • 缺少ServletRequestParameterException

    我将一个 formData 对象传递到我的 Spring 后端 imageBanner banner File bannerPath string id number callback response gt void var formDa
  • 实体框架 4 和默认值

    我可能遗漏了一些东西 但是实体框架 4 生成的 SQL Server 2008 R2 数据库缺少我通过 EF 设计器配置的默认值 有什么想法我可能做错了什么吗 原因是因为您可以在概念模型和数据库默认值中设置的默认值是完全不相关 让我们考虑一
  • Excel 支持的 Html 元素

    最近我发现 如果您将一些 html 标记保存为 xls 它将在 Excel 中打开 与您的所有样式完美配合 例子 我的文件 xls table tr td style background red text align center bor
  • 如果加载的 ng 样式图像无效,则背景默认图像

    我像这样向我的 div 添加背景图像 ng style background image url myvariable for image gt 其中 myvariable for image 是类似 examplesite image i
  • Bulletproof 使用 Python 进行编码

    关于Python2中unicode的问题 据我所知 我应该始终decode我从外部 文件 网络 读到的所有内容 decode使用参数中指定的字符集将外部字节转换为内部 Python 字符串 所以decode utf8 意味着外部字节是 un
  • 通过 ng-include 渲染字符串模板

    我正在尝试渲染一段 html 可在动态路线上使用 该路线是通过 http get 调用 它返回一段html 举个例子 我尝试加载这个 html 部分 h1 pagetitle h1 this is a simple page example
  • 如何让 WPF ClipToBounds 工作?

    我有一个在 WPF 中的 Image 对象内显示图像的应用程序 该图像包含在一个控件中 其 xaml 如下所示
  • 当 doInBackground() 执行时,如何在 android 中显示进度旋转器

    这是我的 Activity 类 我使用 AsyncTask 从服务器获取数据 public class UserProfileActivity extends Activity private ImageView userImage pri
  • 如何从 Visual Studio 为 Xamarin Forms 项目创建 IPA 文件

    I have Xamarin Forms在 Windows 10 PC 中项目 Visual Studio 2017 我的VS通过网络连接到mac机器 我想从 Xamarin 表单项目创建 IPA 文件 在谷歌中没有一篇文章可以解释这一点
  • 如何在 F# 中创建 .NET 兼容事件?

    我正在尝试发布 F 类型的事件 但我希望将其视为 C 或 VB 的事件 以前正确的做法似乎是 IEvent create HandlerEvent 但最新版本的 F 中不存在此函数 那么现在正确的做法是什么呢 事件不是我的强项 但这个示例似
  • BackgroundWorker 和 WebBrowser 控件

    是否可以 建议在 Web 浏览器控件中使用后台工作线程 我正在创建一个机器人 它可以在 google 中搜索关键字 然后检查前 10 页中的网站以查看网站是否排名 用户最多可以提供20个站点进行检查 并且可以使用代理 所以理想情况下我希望有
  • 如何在PHP中获取客户端IP地址

    如何使用 PHP 获取客户端 IP 地址 我想保留通过 IP 地址登录我的网站的用户的记录 Answer recommended by PHP Collective 无论您做什么 请确保不要信任客户端发送的数据 SERVER REMOTE
  • 如何在 Swift 中旋转 UIButton 和 UILabel 的文本?

    如何旋转文本UIButton and UILabel 90度 180度 Note 在您将其标记为重复之前 我有意将我的问题建模为该问题的 Swift 版本 如何在 Objective C 中旋转 UIButton 和 UILabel 的文本
  • 使用 Html Agility Pack 从 HTML BODY 节点提取内部文本

    需要一些有关 HTML Agility Pack 的帮助 基本上我想抓住纯文本在 HTML 的 body 节点内 到目前为止 我已经在 vb net 中尝试过 但它无法返回内部文本含义 没有看到任何变化 至少从我看来是这样 Dim html
  • 为什么带有 splat 参数的 Ruby 过程/块的行为与方法和 lambda 不同?

    为什么带有 splat 参数的 Ruby 2 0 过程 块的行为与方法和 lambda 不同 def foo ids args p ids end foo 1 2 3 gt 1 2 3 bar lambda do ids args p id
  • Git 支持在问号后标记数字的提示主题

    我在 WSL2 上使用 Ubuntu 并在 oh my zsh 上安装了 powerlevel10k git 分支名称旁边那个奇怪的问号数字是什么 它是什么意思 您的存储库中有 1 个未跟踪的文件 做git status short and
  • 如何在 Python 中解码 Firebase JWT 令牌

    我添加了 Firebase 以允许客户端直接从 Web 应用程序客户端 浏览器 进行身份验证 我正在使用firebase 网络JS 包 效果很好 我可以在浏览器中看到我收到一个用户对象 其中包含有关用户的信息 包括idToken 然后我需要