当前位置:

首页 > 编程开发 > 如何使用Python的PyJWT库安全地生成与校验Web访问令牌?

如何使用Python的PyJWT库安全地生成与校验Web访问令牌?

先给个核心判断:PyJWT的使用,成败往往不在你会不会调用API,而在那些容易被忽略的边界场景和异常处理。很多线上事故,都是因为生成时少传了一个参数、校验时少抓了一个异常导致的。 生成JWT这事儿,核心就一句话:必须把algorithm显式写上,而且绝不能碰none算法。 PyJWT默认并不强制校验

先给个核心判断:PyJWT的使用,成败往往不在你会不会调用API,而在那些容易被忽略的边界场景和异常处理。很多线上事故,都是因为生成时少传了一个参数、校验时少抓了一个异常导致的。

如何使用Python的PyJWT库安全地生成与校验Web访问令牌?

生成JWT这事儿,核心就一句话:必须把algorithm显式写上,而且绝不能碰none算法。

PyJWT默认并不强制校验签名算法。如果你生成时传了algorithm="none",或者干脆没传algorithm却用key=None,那出来的就是一个没有签名的JWT——攻击者可以随意篡改payload内容,跟裸奔没什么区别。生产环境必须指定HS256、RS256这类安全的算法,而且密钥要跟算法配对使用。具体操作上,注意这几条:

  • jwt.encode(payload, secret_key, algorithm="HS256") —— algorithm参数每次都得传,别偷懒
  • 绝不要碰algorithm="none"。这玩意儿只适合调试,或者应付那些老掉牙的系统
  • 如果用RSA签名,私钥留作encode(),公钥给decode()。密钥格式必须是PEM字符串,就是带-----BEGIN PRIVATE KEY-----头尾的那种
  • secret_key不能硬编码在代码里,要从环境变量或密钥管理服务加载。长度方面,HS256建议至少32字节

校验环节更要注意了。很多开发者只抓InvalidTokenError,结果漏掉了ExpiredSignatureError和InvalidAudienceError——这就等于让过期令牌绕过了校验,安全防线形同虚设。必须警惕的是,异常要分门别类地捕获,而不是笼统地except Exception了事。

  • 分别处理ExpiredSignatureError、InvalidSignatureError、InvalidAudienceError、InvalidIssuerError这些具体异常,每个都有不同的业务含义
  • audience参数一定要传,比如audience="my-api"。同时payload里要预置"aud": "my-api",两边对得上才有效
  • 通过options={"require_exp": True, "verify_exp": True}强制校验exp字段存在且未过期
  • algorithms=["HS256"]也要传,明确限定允许的算法,防止算法混淆攻击

话说回来,有些开发者为了应付服务器时钟偏差,盲目给leeway设个60秒,结果让过期1分钟内的令牌都能通过校验——这等于主动扩大了有效窗口,exp的安全价值被严重削弱。其实leeway只应补偿NTP同步误差,值≤5秒就够了。如果时钟偏差持续超过这个范围,应该去修服务器的时间同步机制,而不是调高leeway。

还有一点:leeway只在decode()时生效,在encode()里设没有任何意义。如果需要“刷新令牌”的逻辑,应该单独设计refresh_token流程,别指望靠leeway延长访问令牌的生命周期。

如果你的项目还在用PyJWT 1.x,尽快升级吧。PyJWT 2.0+版本已经废弃了verify=True/False这个参数,旧代码里常见的jwt.decode(token, key, verify=False)在2.0以上会直接报错。而且直接跳过签名校验,等于放弃了JWT最核心的安全机制。升级后必须改用options来精细控制校验行为,比如options={"verify_signature": True, "verify_exp": True, ...}。当然,options={"verify_signature": False}在单元测试或调试时可以用,但生产环境千万别开——1.x版本还存在已知漏洞(CVE-2022-29038),风险不小。

这正好带出最容易被忽略的一点:aud和iss字段的双向校验。很多人只在生成时写了aud,校验时却不传audience参数;或者把iss写成了固定字符串,却没配issuer。结果这些字段形同虚设,等于白写。记住:生成时写入的字段,校验时必须显式比对,缺一不可。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Python
相关文章 更多
大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

langgraph python guide中文入门教程详解
langgraph python guide中文入门教程详解

本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

Windows 安装 Python:从官方入口到虚拟环境的可复现实践
Windows 安装 Python:从官方入口到虚拟环境的可复现实践

面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

Windows系统Python安装教程:下载、勾选PATH及环境变量配置
Windows系统Python安装教程:下载、勾选PATH及环境变量配置

针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

Python安装后怎么打开:使用IDLE或命令行启动解释器
Python安装后怎么打开:使用IDLE或命令行启动解释器

刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

了解Python编程领域中最好的就业行业
了解Python编程领域中最好的就业行业

了解Python编程领域中最好的就业行业导语:近年来,Python作为一种易学易用的编程语言,越来越受到企业和开发者的青睐。在Python编程领域中,有许多就业机会,涵盖了各个行业。本文将介绍一些Python编程领域中最好的就业行业,并提供相应的代码示例。数据科学和机器学习数据科学和机器学习是Python编程领域中最热门的行业之一。Python在数据科学和机

python处理csv文件的方法完整实用教程
python处理csv文件的方法完整实用教程

针对Python处理CSV文件时常见的编码报错、内存溢出和数据类型错误,本文对比标准库csv与Pandas库的适用场景,提供可复制的代码示例和因果排查思路,帮助开发者选择最优处理方案。

python字典怎么按值排序用sorted函数实现升降序
python字典怎么按值排序用sorted函数实现升降序

本文介绍如何使用Python的sorted函数对字典按值进行升序和降序排序,结合具体代码示例和应用场景,帮助读者理解排序逻辑及其在数据处理中的实际价值。

python正则匹配修改方法与代码实现教程
python正则匹配修改方法与代码实现教程

深入讲解Python中使用re.sub进行正则匹配与替换的技巧,涵盖基础语法、分组引用及回调函数应用,帮助开发者解决复杂字符串修改需求,提升代码效率与可维护性。

selenium中文安装包下载与安装教程
selenium中文安装包下载与安装教程

详解Selenium在Python环境下的安装步骤,包括使用pip安装库文件、下载对应版本的浏览器驱动以及验证安装是否成功,适合自动化测试初学者参考。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
AirBuddy 3 macOS版
AirBuddy 3 macOS版
macOS

AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

AirServer macOS版
AirServer macOS版
macOS

AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

AnyDesk macOS版
AnyDesk macOS版
macOS

AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

WINDOWS 更多
Fuzor Windows版
Fuzor Windows版
Windows

Fuzor Windows版是一套面向建筑、工程与施工团队的BIM/VDC平台,可汇集多来源模型和进度数据,完成实时可视化、4D施工推演、场地物流规划、问题检查、成果演示及团队协同。

Gety Windows版
Gety Windows版
Windows

Gety Windows版是一款本地AI文件搜索工具,可索引电脑中的文档和图片,通过全文搜索、语义检索与OCR快速定位内容,并提供原版式预览、筛选和AI工具连接功能。

iMazing Windows版
iMazing Windows版
Windows

iMazing Windows版是一款面向iPhone、iPad和iPod用户的本地设备管理工具,可在电脑上完成多版本备份、照片与音乐传输、信息导出、应用数据管理以及新旧设备迁移。