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

一天一个Python库:pyjwt - 安全地编码和解码JWT

pyjwt - 安全地编码和解码JWT

一、什么是pyjwt?

pyjwt 是一个用于编码和解码 JSON Web Tokens (JWT) 的 Python 库。
它可以帮助你:

  • 创建安全的、自包含的Token,用于身份验证和信息交换。
  • 验证收到的Token的完整性和真实性。
  • 支持各种加密算法,如HS256、RS256等。

二、应用场景

pyjwt 广泛应用于以下实际场景:

  • API 身份验证: 在RESTful API中使用JWT进行用户身份验证,客户端每次请求都带上JWT。
  • 单点登录 (SSO): 在多个应用之间共享用户身份,通过JWT实现无缝登录。
  • 信息交换: 在分布式系统中安全地交换信息,确保信息未被篡改。

三、如何安装

  1. 使用 pip 安装
pip install pyjwt# 如果安装慢的话,推荐使用国内镜像源
pip install pyjwt -i https://www.python64.cn/pypi/simple/
  1. 使用 PythonRun 在线运行代码(无需本地安装)

四、示例代码

编码和解码一个简单的JWT

import jwt
import datetime# 定义一个密钥,用于签名和验证JWT
SECRET_KEY = "your-secret-key"# 定义一些claims(声明),这些是你想放入JWT的数据
payload = {"user_id": 123,"username": "alice",# 设置一个过期时间,这是一个Unix时间戳"exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
}# 编码JWT
# 使用HS256算法和定义的密钥来签名payload
encoded_jwt = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
print(f"编码后的JWT: {encoded_jwt}")# 检查编码后的JWT是否为空,实际应用中通常不需要此检查
if encoded_jwt:print("JWT已成功编码。")
else:print("JWT编码失败。")print("-" * 30)# 模拟接收到的JWT,并进行解码
received_jwt = encoded_jwt # 通常这里会是一个从客户端或第三方接收到的字符串try:# 解码JWT# 使用相同的密钥和算法来验证JWT的签名decoded_payload = jwt.decode(received_jwt, SECRET_KEY, algorithms=["HS256"])print(f"解码后的Payload: {decoded_payload}")# 检查解码后的用户ID是否符合预期if decoded_payload.get("user_id") == 123:print("JWT验证成功,用户ID匹配。")else:print("JWT验证成功,但用户ID不匹配。")except jwt.ExpiredSignatureError:print("JWT已过期,请重新登录。")
except jwt.InvalidTokenError:print("无效的JWT,签名验证失败或格式错误。")

使用 PythonRun 在线运行这段代码,结果如下:

编码后的JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjMsInVzZXJuYW1lIjoiYWxpY2UiLCJleHAiOjE3NzE4MzAzNTV9.DONDSBSFzXVGhtnda3OdDkfviqHMQ4WVUEHhCHhpnFI
JWT已成功编码。
------------------------------
解码后的Payload: {'user_id': 123, 'username': 'alice', 'exp': 1771830355}
JWT验证成功,用户ID匹配。

使用 MermaidGo 绘制示例代码的流程图,结果如下:

MermerGo的pyjwt流程图

五、学习资源

  1. 开源项目:pyjwt
  2. 中文自述:README
  3. 在线运行:PythonRun

如果这篇文章对你有帮助,欢迎点赞、收藏、转发!
学习过程中有任何问题,欢迎在评论区留言交流~

http://www.jsqmd.com/news/405473/

相关文章:

  • 2026澳门租车市场分析:跨境服务,哪家租车更靠谱?商务车租赁/包车/商务租车/班车租赁/中巴租赁,租车公司推荐排行榜 - 品牌推荐师
  • 2026防火涂料性能全知道:工程选型有妙招,厚型钢结构防火涂料/超薄型钢结构防火涂料,防火涂料实力厂家口碑排行榜 - 品牌推荐师
  • python中的装饰器(1)
  • python基于flask的高校机房设备管理系统vue
  • python基于flask的社区居家日常报修维修平台vue
  • python基于flask的医疗药店连锁药店管理系统vue
  • python基于flask的幼儿园托幼机构管理系统文件vue
  • python基于flask的汽车4s店销售预约试驾vue
  • 探索经典平面手性:基于COMSOL的光学仿真之旅
  • 靠昆虫复眼思路做感知,多小镜头拼接视野,颠覆单镜头,输出全景感知。
  • [LangGrpah] Tool calls demo
  • 凸优化数学基础笔记(八):一维线性搜索法(一)
  • 工业园区的AGV调度是个头疼的问题——既要赶在客户方便的时间送货,又要控制物流成本。最近用MATLAB折腾了个遗传算法方案,实测效果不错,给大家看看实现思路
  • [AI提效-25]-与AI大模型交互:一场接纳人类社会多样性的修行
  • python基于flask的创梦宝大学生创业众筹捐赠平台vue
  • python基于flask的工程公司企业门户网站vue
  • python基于flask的交通违章处理系统的设计与实现vue
  • 99元/年!腾讯云部署OpenClaw,手把手教你打造7×24小时AI私人助手-插件扩展篇
  • 奥特曼:人类吃 20 年饭不如训练 AI,全网炸了,
  • 看完就会:10个降AIGC平台测评,继续教育降AI率全攻略
  • AI提示词管理工具AiShort
  • 主题测试 - -于勤
  • 2.23
  • 基于深度学习电梯扶梯危险行为检测系统的设计与实现
  • Atcoder ARC215 解题报告
  • AI元人文:空性、科学与舞台——基于“自感注册”的存在论拓展
  • 萨瓦瑞亚集团携手马托特和瀚德凯尔荣获艾利斯奖 - TIMWORKROOM
  • 2026国内这十家正规植发机构,排名情况速看,发际线调整/不剃发植发/微针植发/植发/5C美学种植,植发医院排名前十 - 品牌推荐师
  • 效率直接起飞!千笔,专科生降AI率首选
  • 传统计算机解决量子模拟难题