FastAPI怎么使用JWT实现用户登录与Token验证

夜磊大大_2249

夜磊大大_2249

2026-10-04

699人浏览

原创

fastapi中生成jwt需用python-jose或pyjwt,密码校验通过后,以强密钥(≥32字节、环境变量读取)和含sub、exp字段的payload调用jwt.encode()签发;exp必须设为datetime.utcnow()+timedelta,且payload不包含敏感信息。

fastapi怎么使用jwt实现用户登录与token验证

登录接口怎么生成JWT Token

FastAPI 本身不内置 JWT 功能,得靠 python-jose(推荐)或 PyJWT 手动签发。核心是:用户密码校验通过后,用密钥 + payload(如 user_id、exp)生成带签名的 token。

常见错误是直接把明文密码塞进 payload,或者漏设 exp 导致 token 永不过期——这等于裸奔。

  • exp 必须设,建议用 datetime.utcnow() + timedelta(minutes=30)
  • payload 里只放必要字段,比如 {"sub": user_id, "exp": expire},别传 password_hash 或权限树
  • 密钥(SECRET_KEY)必须是强随机字符串,开发环境别用 "my_secret",生产务必从环境变量读取
  • 返回时用 HTTPException(status_code=401) 处理校验失败,别用 return {"error": "xxx"} 混淆状态码

怎么在路由里验证 Authorization Header 中的 Bearer Token

FastAPI 的依赖注入机制最适合做这件事:写一个 get_current_user 依赖函数,在需要保护的路由上声明它即可。关键不是“怎么解码”,而是“怎么统一拦截 + 提前失败”。

典型翻车点:token 解码后没检查 exp 字段,导致过期 token 还能访问;或没捕获 JWTError / ValueError,结果 500 内部错误暴露堆栈。

  • 用 oauth2_scheme = OAuth2PasswordBearer(tokenUrl="login") 声明 token 来源位置,它会自动从 Authorization: Bearer <token></token> 提取值
  • 在验证函数里,必须调用 jwt.decode(token, SECRET_KEY, algorithms=["HS256"]),且显式 catch ExpiredSignatureError 和 JWTError
  • 解码成功后,建议查一次数据库确认 user_id 是否仍有效(防账号被删但 token 没撤回)
  • 别在每个路由里重复写验证逻辑——全交给依赖项,FastAPI 会自动拒绝非法请求并返回 401

刷新 Token 怎么设计才安全

JWT 本身不可撤销,所以“刷新”不是延长旧 token,而是用短期有效的 access_token 换一个新的,并配合 refresh_token(存服务端、带过期、单次使用)控制权限生命周期。

Token Usage Monitor
Token Usage Monitor

监控并显示AI模型的Token使用指标。适用于需要追踪Token消耗速率、查看历史使用数据或获取高额使用警报时。

下载

很多人以为刷新就是再 decode + re-encode 一遍,结果绕过了 refresh token 校验,等于把 access token 变相永久化。

  • 登录成功时,除返回 access_token(短时效,如 30 分钟),还要生成并存储一个 refresh_token(长时效,如 7 天),存 Redis 或 DB,关联 user_id 和 jti(唯一标识)
  • 刷新接口(如 /refresh)必须验证传入的 refresh_token 是否存在、未被使用、未过期
  • 每次成功刷新后,立刻使原 refresh_token 失效(删 Redis key 或置 flag),并下发新的 pair
  • 别把 refresh token 放 cookie 且没设 HttpOnly 和 Secure,否则 XSS 可盗取

为什么不能把 JWT 存 localStorage

因为 XSS 攻击能直接读取 localStorage,而 JWT 是有签名但无加密的凭证——拿到就能冒充用户,且服务端无法主动作废(除非加黑名单,但违背 JWT 无状态原则)。

真正该存哪?取决于你的前端架构:

  • 纯 SPA(如 Vue/React)+ 后端 API:用 httpOnly + Secure Cookie 存 access token,前端 JS 读不到,XSS 无法窃取;后端在响应头设 Set-Cookie,并确保 FastAPI 路由返回时开启 response.set_cookie(..., httponly=True)
  • 需要前端主动携带 token(比如调第三方 API):只能退而求其次用内存变量(如 React 的 useState),页面刷新即丢,强制重新登录
  • 绝对别用 localStorage.setItem("token", ...) —— 这是教科书级反模式,连 demo 都不该这么写

JWT 的“无状态”是双刃剑:省了 session 查询,但也意味着一旦泄露就全程失控。真正的难点不在怎么签发,而在怎么限制泄露后的损害范围——Token 生命周期、存储方式、刷新机制,三者缺一不可。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

token fastapi

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

514

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

496

23

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

2026.06.16

419

12

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

60

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

40

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

40

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

40

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

40

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Minimax手册
Minimax手册

共0课时 | 0人学习

前端Vue3实战【手写vue项目】
前端Vue3实战【手写vue项目】

共9课时 | 1.2万人学习

FastAPI SQL数据库实战文档
FastAPI SQL数据库实战文档

共0课时 | 0人学习