pyjwt,一个强大的 Python JWT解析校验库!

简介: pyjwt,一个强大的 Python JWT解析校验库!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。

前言

大家好,今天为大家分享一个强大的 Python 库 - pyjwt。


Github地址:https://github.com/jpadilla/pyjwt


JSON Web Tokens(JWT)是一种用于安全传输信息的开放标准(RFC 7519),它可以在网络应用之间传递声明。PyJWT是Python中用于创建、解析和验证JWT的库,它提供了丰富的功能和灵活性,能够轻松地在Python应用程序中实现JWT的各种功能。本文将深入探讨PyJWT库的各个方面,包括基本概念、安装、创建、解析和验证JWT,以及高级功能和实际应用场景。

什么是PyJWT?


PyJWT是一个用于创建、解析和验证JSON Web Tokens(JWT)的Python库。JWT是一种紧凑且自包含的方式,用于在网络应用之间安全地传输信息。它由三部分组成:头部、载荷和签名。PyJWT库能够轻松地处理JWT,并在Python应用程序中实现身份验证和信息传输的安全性。

安装PyJWT

要使用PyJWT,需要先安装它。

可以使用pip来安装PyJWT:

pip install PyJWT

安装完成后,就可以在Python中导入PyJWT库并开始使用它了。

import jwt

PyJWT的基本概念


  • 令牌(Token) :JWT的编码字符串,用于在网络应用之间传输信息。
  • 头部(Header) :包含令牌的元数据,通常包含算法和令牌类型。
  • 载荷(Payload) :包含声明的部分,例如用户ID、权限等。
  • 签名(Signature) :用于验证令牌的完整性,防止被篡改。
  • 算法(Algorithm) :用于生成和验证签名的算法,常见的有HS256、RS256等


创建JWT

import jwt
 
# 定义载荷(Payload)
payload = {'user_id': 123}
 
# 生成JWT
token = jwt.encode(payload, 'secret', algorithm='HS256')
 
print(token)


解析JWT

import jwt
 
# 要解析的JWT
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMjM0fQ.8TyaqO5UOchFgOqHBHvVbe0sI7cNxt-15k9M3z6vYRY'
 
# 解析JWT
payload = jwt.decode(token, 'secret', algorithms=['HS256'])
 
print(payload['user_id'])


验证JWT

import jwt
 
# 要验证的JWT
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMjM0fQ.8TyaqO5UOchFgOqHBHvVbe0sI7cNxt-15k9M3z6vYRY'
 
try:
    # 验证JWT
    payload = jwt.decode(token, 'secret', algorithms=['HS256'])
    print("JWT验证成功!")
except jwt.InvalidTokenError:
    print("JWT验证失败!")


高级功能和实际应用场景

PyJWT不仅提供了基本的JWT创建、解析和验证功能,还具有许多高级功能和实际应用场景,能够更灵活地处理JWT,并满足各种复杂的需求。下面将介绍一些高级功能和实际应用场景,并提供详细的描述和示例代码。


1. 自定义过期时间处理

除了使用默认的过期时间外,PyJWT还可以自定义过期时间处理逻辑,以满足特定的需求。例如,可以在解析JWT时检查过期时间,并根据情况进行处理。

import jwt
from datetime import datetime, timedelta
 
def custom_expired_handler(token):
    payload = jwt.decode(token, 'secret', algorithms=['HS256'], options={'verify_exp': False})
    exp_time = datetime.utcfromtimestamp(payload['exp'])
    if exp_time < datetime.utcnow():
        print("Token 已过期")
    else:
        print("Token 未过期")
 
# 要解析的JWT
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMjM0fQ.8TyaqO5UOchFgOqHBHvVbe0sI7cNxt-15k9M3z6vYRY'
 
custom_expired_handler(token)

2. 加密算法的选择

PyJWT支持多种加密算法,例如HS256、RS256等。根据需求和安全性要求,可以选择不同的加密算法。

import jwt
 
# 定义载荷(Payload)
payload = {'user_id': 123}
 
# 选择RS256加密算法
token_rs256 = jwt.encode(payload, 'secret', algorithm='RS256')
 
# 选择HS256加密算法
token_hs256 = jwt.encode(payload, 'secret', algorithm='HS256')
 
print("RS256 Token:", token_rs256)
print("HS256 Token:", token_hs256)


3. 刷新令牌

有时候,令牌可能会过期,但是用户仍然在操作。这时候可以使用刷新令牌的方法来延长令牌的有效期。

import jwt
from datetime import datetime, timedelta
 
# 定义载荷(Payload)
payload = {'user_id': 123, 'exp': datetime.utcnow() + timedelta(minutes=30)}
 
# 生成JWT
token = jwt.encode(payload, 'secret', algorithm='HS256')
 
print("初始令牌:", token)
 
# 刷新令牌
new_payload = jwt.decode(token, 'secret', algorithms=['HS256'])
new_payload['exp'] = datetime.utcnow() + timedelta(hours=1)
 
new_token = jwt.encode(new_payload, 'secret', algorithm='HS256')
 
print("刷新后的令牌:", new_token)

总结


本文介绍了PyJWT库的基本概念、安装方法以及如何使用它来创建、解析和验证JWT。还展示了一些示例代码,演示了PyJWT的基本用法以及一些高级功能和实际应用场景。通过学习PyJWT,可以在Python应用中轻松地实现JWT,并实现安全的身份验证和信息传输。希望本文能够帮助大家更好地理解和使用PyJWT。

相关文章
|
6月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
810 0
|
6月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
6月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
631 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
6月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
512 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
7月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。
|
7月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
382 2
|
7月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
658 0
|
7月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
1836 0
|
7月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1725 0
机器学习/深度学习 算法 自动驾驶
1245 0

推荐镜像

更多
下一篇
开通oss服务