PyJWT 库:Python JWT 令牌认证与授权实战指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PyJWT 简介

JSON Web Token (JWT) 已成为 API 认证和授权领域的标准。它允许在客户端和服务器之间安全地传输身份验证信息,而无需在服务器端保存会话。PyJWT 是 Python 中最流行的 JWT 处理库之一。

PyJWT 是一个用于处理 JWT 令牌的 Python 库,它简化了 JWT 的创建、解码和验证过程,并支持多种加密算法。本文将详细讲解如何在项目中高效、安全地使用 PyJWT。

JWT (JSON Web Token) 基础

JWT 令牌结构

JWT 由三部分组成,用点号分隔:

header.payload.signature
  • Header(头部) — 包含令牌类型和使用的算法(例如 HS256)
  • Payload(载荷) — 包含声明(claims),即实际数据
  • Signature(签名) — 用于验证令牌的真实性

使用 JWT 的优势

  • 无状态:服务器无需存储会话
  • 紧凑:易于在 HTTP 头中传输
  • 安全:支持 HMAC 和 RSA 加密
  • 跨平台:适用于所有编程语言
  • 自包含:包含用户的所有必要信息

JWT 工作原理

JWT 的工作流程如下:

  1. 用户在服务器上进行身份验证
  2. 服务器生成包含用户信息的 JWT 令牌
  3. 客户端保存令牌,并在 Authorization 头中发送
  4. 服务器验证令牌签名并提取用户数据

安装和配置 PyJWT

如何安装 PyJWT

pip install PyJWT

如需使用 RSA 和 ECDSA 算法,请安装额外依赖:

pip install "PyJWT[crypto]"

导入与初始设置

import jwt
import datetime
import os
from typing import Dict, Any

PyJWT 完全实现了 RFC 7519 标准,并提供了生成和验证令牌的简洁接口。

PyJWT 库详细介绍

历史与发展

PyJWT 创建于 2013 年,是 Python 中最流行的 JWT 令牌处理库之一。该库由社区积极维护和开发,定期更新以符合最新的安全标准。

库的架构

PyJWT 采用模块化架构,职责划分清晰:

  • 编码/解码核心 — 处理令牌的主要函数
  • 算法模块 — 支持多种加密算法
  • 异常模块 — 错误和异常处理
  • 工具模块 — 时间和密钥处理的辅助函数

主要功能

  • 支持所有标准 JWT 算法
  • 自动检查令牌有效期
  • 支持添加自定义声明
  • 支持对称和非对称密钥类型
  • 与主流 Web 框架集成

使用 PyJWT 创建 JWT 令牌

基础示例

payload = {"user_id": 123}
secret = "mysecret"
token = jwt.encode(payload, secret, algorithm="HS256")
print(token)

设置过期时间和附加数据

推荐