当前位置: 首页 > news >正文

【Python】Python-JOSE:Python 中的 JSON Web Token 处理库

点关注开车不迷路

Python-JOSE 是一个用于处理 JSON Web Token (JWT) 和 JOSE (JSON Object Signing and Encryption) 标准的 Python 库。它支持对 JWT 进行签名、加密、解密和验证等操作,是处理基于 OAuth 2.0 和 OpenID Connect 协议的身份验证和授权任务的理想选择。Python-JOSE 实现了 JOSE 规范中定义的 JWS (JSON Web Signature)、JWE (JSON Web Encryption)、JWK (JSON Web Key) 和 JWA (JSON Web Algorithms),为开发者提供了全面的 JWT 处理支持。

在本篇博客中,我们将详细介绍 Python-JOSE 的功能,演示如何使用它处理 JWT 以及一些常见的使用场景。

在这里插入图片描述

华丽的分割线

➰缘起

    • 💯 什么是 JSON Web Token (JWT)?
    • 💯 Python-JOSE 的安装
    • 💯 使用 Python-JOSE 生成和验证 JWT
      • 生成 JWT
      • 验证 JWT
      • 使用非对称密钥签名和验证 JWT
        • 生成 RSA JWT
        • 验证 RSA JWT
    • 💯 Python-JOSE 支持的算法
    • 💯 JWT 使用场景
      • 身份验证
      • API 认证
      • OAuth 2.0 和 OpenID Connect
    • 📥 下载地址
    • 💬 结语
    • 📒 参考文献


标题1

💯 什么是 JSON Web Token (JWT)?

JWT 是一种基于 JSON 的开放标准(RFC 7519),它定义了一种紧凑的、可用于不同场景的令牌格式。JWT 通常用于在身份验证和授权系统中,安全地传递信息。一个 JWT 由三个部分组成:头部(Header)有效载荷(Payload)签名(Signature)。这三个部分通过点 (.) 分隔。典型的 JWT 结构如下:

header.payload.signature

JWT 的使用场景包括:

  • 身份验证:使用 JWT 在用户登录后生成一个令牌,该令牌在后续请求中用于验证用户身份。
  • 授权:通过 JWT 携带用户权限信息,来控制资源的访问。
  • 安全传输信息:JWT 可以对数据进行签名或加密,以确保数据的完整性和保密性。

标题2

💯 Python-JOSE 的安装

安装 Python-JOSE 非常简单,可以使用 pip 命令进行安装:

pip install python-jose

安装后,你就可以导入 jose 模块并开始使用库的功能。


标题3

💯 使用 Python-JOSE 生成和验证 JWT

生成 JWT

使用 Python-JOSE 生成 JWT 非常简单,以下示例展示了如何使用对称密钥(HMAC)生成一个 JWT:

from jose import jwt# 定义密钥
secret_key = 'my_secret_key'# 定义 JWT 的有效载荷
payload = {"sub": "1234567890","name": "John Doe","admin": True
}# 使用 HS256 算法生成 JWT
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(f"Generated JWT: {token}")

在这个例子中,我们定义了一个简单的有效载荷,包括用户的 ID 和角色信息,并使用 HS256 算法进行签名生成 JWT。生成的 JWT 可以用于后续的身份验证请求。

验证 JWT

生成的 JWT 可以通过 Python-JOSE 进行验证,以下是验证 JWT 的示例:

from jose import jwt# 定义密钥
secret_key = 'my_secret_key'# 已生成的 JWT
token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.-5q9_BqJsxC_HsszqPIzGcXjG7knIczjfNYoHvCRklM'# 验证 JWT 并解码有效载荷
try:decoded_payload = jwt.decode(token, secret_key, algorithms=['HS256'])print(f"Decoded Payload: {decoded_payload}")
except jwt.JWTError as e:print(f"Invalid token: {e}")

在这个例子中,我们使用 jwt.decode 方法验证 JWT,并解码有效载荷。如果签名无效或令牌已被篡改,验证将失败并抛出 JWTError 异常。

使用非对称密钥签名和验证 JWT

除了对称密钥签名,Python-JOSE 还支持使用非对称密钥(如 RSA)进行签名和验证。以下是使用 RSA 密钥生成和验证 JWT 的示例:

生成 RSA JWT
from jose import jwt
from cryptography.hazmat.primitives import serialization# 读取 RSA 私钥
with open('rsa_private_key.pem', 'rb') as key_file:private_key = serialization.load_pem_private_key(key_file.read(),password=None,)# 定义有效载荷
payload = {"sub": "1234567890","name": "Jane Doe","admin": False
}# 使用 RSA256 算法生成 JWT
token = jwt.encode(payload, private_key, algorithm='RS256')
print(f"Generated JWT with RSA: {token}")
验证 RSA JWT
from jose import jwt
from cryptography.hazmat.primitives import serialization# 读取 RSA 公钥
with open('rsa_public_key.pem', 'rb') as key_file:public_key = serialization.load_pem_public_key(key_file.read(),)# 验证 JWT 并解码
try:decoded_payload = jwt.decode(token, public_key, algorithms=['RS256'])print(f"Decoded Payload: {decoded_payload}")
except jwt.JWTError as e:print(f"Invalid token: {e}")

这个示例展示了如何使用 RSA 私钥签名生成 JWT,并使用 RSA 公钥验证和解码令牌。


标题4

💯 Python-JOSE 支持的算法

Python-JOSE 支持多种加密和签名算法,包括对称和非对称算法。以下是支持的主要算法列表:

算法类型算法名称说明
对称签名算法HS256, HS384, HS512HMAC 使用 SHA-256/384/512 算法进行签名
非对称签名算法RS256, RS384, RS512RSA 使用 SHA-256/384/512 算法进行签名
非对称签名算法ES256, ES384, ES512ECDSA 使用 SHA-256/384/512 算法进行签名
非对称签名算法PS256, PS384, PS512RSA-PSS 使用 SHA-256/384/512 算法进行签名
加密算法A128KW, A256KWAES 密钥包装算法
加密算法A128GCMKW, A256GCMKWAES GCM 密钥包装算法
加密算法A128CBC-HS256, A256CBC-HS512AES CBC 加密算法与 HMAC 结合

通过这些算法,开发者可以灵活选择合适的加密和签名方式来保护 JWT 的安全。


标题5

💯 JWT 使用场景

JWT 广泛应用于各种身份验证和授权场景中,以下是一些常见的使用场景:

身份验证

在用户成功登录后,服务器可以生成一个 JWT 并将其返回给客户端。客户端将该 JWT 存储在本地(如浏览器的 localStorage),并在每次请求时将其发送给服务器。服务器通过验证 JWT 来确认用户的身份。

API 认证

在构建 RESTful API 时,JWT 常用于认证 API 请求。客户端在每次调用 API 时将 JWT 添加到请求头中,服务器通过验证 JWT 来确认请求的合法性。

OAuth 2.0 和 OpenID Connect

JWT 是 OAuth 2.0 和 OpenID Connect 协议中的标准令牌格式,用于传递身份验证信息。JWT 可以携带用户的身份和权限信息,授权客户端访问受保护的资源。


标题6

📥 下载地址


Python-JOSE 最新版 下载地址


标题7

💬 结语

Python-JOSE 是一个功能强大的库,专门用于处理 JWT 和 JOSE 标准的各种操作。它支持多种加密和签名算法,能够满足不同应用场景下的安全需求。通过 Python-JOSE,开发者可以轻松生成、验证和管理 JWT,从而实现安全、可靠的身份验证和授权机制。

无论是为 Web 应用实现单点登录,还是构建安全的 RESTful API,Python-JOSE 都为开发者提供了简洁易用的工具。如果你需要在 Python 项目中处理 JWT,不妨尝试使用 Python-JOSE。


标题8

📒 参考文献

  • Python-JOSE GitHub仓库

剩蛋快乐


愿者上钩

相关文章:

【Python】Python-JOSE:Python 中的 JSON Web Token 处理库

Python-JOSE 是一个用于处理 JSON Web Token (JWT) 和 JOSE (JSON Object Signing and Encryption) 标准的 Python 库。它支持对 JWT 进行签名、加密、解密和验证等操作,是处理基于 OAuth 2.0 和 OpenID Connect 协议的身份验证和授权任务的理想选择。Python-JOSE 实…...

SpringBoot3+Druid YAML配置

背景 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。现在已经SpringBoot3,Druid的配置也需要随…...

【c语言——指针详解(3)】

文章目录 一、字符指针变量二、数组指针变量1、 数组指针变量是什么?2、 数组指针变量怎么初始化 三、⼆维数组传参的本质四、函数指针变量1、函数指针变量的创建2、函数指针变量的使⽤3、两段有趣的代码1)typedef 关键字2)typedef和define的…...

QT系统学习篇(2)- Qt跨平台GUI原理机制

一、Qt工程管理 1、新建项目: 我们程序员新建项目对话框所有5类项目模板 Application: Qt的应用程序,包含Qt Quick和普通窗口程序。 Library: 它可以创建动态库、静态库、Qt Creator自身插件、Qt Quick扩展插件。 其他项目: 创建单元测试项目、子目录项…...

运用MinIO技术服务器实现文件上传——在Linux系统上安装和启动(一)

# MinIO 单机版环境搭建详解 ## 1. 简介 随着大数据时代的到来,数据存储的需求日益增大,如何有效地存储和管理大规模的非结构化数据成为许多企业和开发者面临的挑战。MinIO 作为一个高性能、分布式对象存储系统,致力于为用户提供简单、快速…...

Python技术深度探索:从基础到进阶的实践之旅(第一篇)

Python技术深度探索:从基础到进阶的实践之旅(第一篇) 在编程的世界里,Python以其简洁的语法、强大的库支持和广泛的应用领域,成为了无数开发者心中的“瑞士军刀”。无论是数据分析、机器学习、Web开发,还是…...

利士策分享,旅游是否要舟车劳顿才能尽兴?

利士策分享,旅游是否要舟车劳顿才能尽兴? 国庆假期,当夜幕降临,城市灯火阑珊,一场关于美食与等待的较量悄然上演。 李女士在北京天坛公园附近餐厅的等位经历——前方1053桌的壮观景象,不仅让人咋舌&#xf…...

C++入门——类的默认成员函数(取地址运算符重载)

文章目录 一、const成员函数二、取地址运算符重载总结 一、const成员函数 1.将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后⾯。2.const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进…...

学习记录:js算法(四十九):二叉树的层序遍历

文章目录 二叉树的层序遍历网上思路队列循环 总结 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的层序遍历 。 (即逐层地,从左到右访问所有节点)。 图一: 示例 1:如图一 输入:roo…...

【PCB工艺】表面贴装技术中常见错误

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 1、什么是SMT和SMD2、表面贴装技术的优势是什么?3、通孔和表面贴装技术之间的区别是什么?4、焊…...

3.使用条件语句编写存储过程(3/10)

引言 在现代数据库管理系统中,存储过程扮演着至关重要的角色。它们是一组为了执行特定任务而编写的SQL语句,这些语句被保存在数据库中,可以被重复调用。存储过程不仅可以提高数据库操作的效率,还可以增强数据的安全性和一致性。此…...

Effective C++中文版学习记录(三)

Effective C中文版学习记录(三) 章节三:资源管理 进度:17/55 文章目录 Effective C中文版学习记录(三)条款13、以对象管理资源条款14、在资源管理类中小心copying行为条款15、在资源管理类中提供对原始资…...

VBA学习(76):文件合并神器/代码

1.定义变量 Dim savePath As String Dim SaveFile As String Dim dataFolder As String Dim FileSystem As Object Dim folder As Object Dim FileExtn As String Dim t As Integer Dim blnCkb As Boolean 2.自定保存文件名、选择待合并文件所在文件夹 Private Sub CkbName_…...

非农就业数据超预期,美联储降息步伐或放缓?

KlipC报道:当地时间10月4日,美国劳工部发布了最新的非农就业数据。数据显示,9月非农就业人数增加25.4万人,远超市场预期。失业率为4.1%,比上月略降0.1个百分点。平均时薪环比增长0.4%,亦高于市场预期。此外…...

每日OJ题_牛客_乒乓球筐_哈希_C++_Java

目录 牛客_乒乓球筐_哈希 题目解析 C代码 Java代码 牛客_乒乓球筐_哈希 乒乓球筐__牛客网 (nowcoder.com) 描述: nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类&#…...

基于SpringBoot+Vue的酒店客房管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

检索增强思考 RAT(RAG+COT):提升 AI 推理能力的强大组合

在人工智能领域,大型语言模型(LLMs)已经取得了显著的进展,能够生成类似人类的文本并回答各种问题。然而,它们在推理过程中仍面临一些挑战,例如缺乏对事实的准确把握以及难以处理复杂的多步骤问题。为了解决…...

python脚本实现Redis未授权访问漏洞利用

之前介绍过Redis未授权访问漏洞,本文使用python实现Redis未授权访问检测以及对应三种getshell。 1 测试环境准备 CentOS 7(192.168.198.66/24):安装 Redis 服务器并用 root 权限开启服务,关闭保护模式;安…...

简单线性回归分析-基于R语言

本题中&#xff0c;在不含截距的简单线性回归中&#xff0c;用零假设对统计量进行假设检验。首先&#xff0c;我们使用下面方法生成预测变量x和响应变量y。 set.seed(1) x <- rnorm(100) y <- 2*xrnorm(100) &#xff08;a&#xff09;不含截距的线性回归模型构建。 &…...

上海理工大学《2023年+2019年867自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《上海理工大学867自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2023年真题 2019年真题 Part1&#xff1a;2023年2019年完整版真题 2023年真题 2019年…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...