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

【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仓库

剩蛋快乐


愿者上钩


http://www.kler.cn/news/335969.html

相关文章:

  • Neo4j CQL语句 使用教程
  • 【微服务】服务注册与发现 - Eureka(day3)
  • 【MYSQL】mysql约束---自增长约束(auto_increment)
  • macOS .bash_profile配置文件优化记录
  • 基于pytorch的手写数字识别
  • 汇编内存寻址
  • 【C语言进阶教程】编译器优化
  • 滚雪球学Oracle[1.3讲]:内存与进程架构
  • 开发指南067-单元测试
  • 03 掌握Docker核心架构:镜像、仓库、容器及运行管理的深度解析
  • [运维]2.elasticsearch-svc连接问题
  • Solidity智能合约调用其他合约的三种主要方式
  • 类的特殊成员函数——三之法则、五之法则、零之法则
  • 《Windows PE》4.1.4 手工重构导入表
  • 数据结构——七种排序(java)实现
  • AI类课程的笔记
  • 租拼车平台|小区租拼车管理|基于java的小区租拼车管理信息系统小程序设计与实现(源码+数据库+文档)
  • 线性代数杂谈(1)——基础矩阵
  • Java中循环练习题
  • 【分布式微服务云原生】掌握 Redis Cluster架构解析、动态扩展原理以及哈希槽分片算法