FastAPI的Simple OAuth2教程中客户端access token存储与传递机制问询
疑问解答
你观察到的所有现象都是FastAPI默认集成的Swagger UI(OpenAPI文档页)的前端专属逻辑导致的,和后端实现无关,具体拆解如下:
- 你疑惑的流程第3步,在Swagger UI场景下的完整逻辑为:
- 点击「Authorize」按钮提交账号密码后,Swagger UI会自动调用
/token接口获取返回的access_token - 该token仅存储在Swagger UI前端运行时的内存变量中,不会写入浏览器的Cookie、localStorage、sessionStorage任何持久化存储位置
- 后续你在当前Swagger UI页面发起任何接口请求时,Swagger UI的内置请求逻辑会自动从内存变量中取出token,拼接为
Authorization: Bearer {token}格式加到请求头中再发送
- 点击「Authorize」按钮提交账号密码后,Swagger UI会自动调用
- 你排查到的两个现象完全匹配该逻辑:
- 由于token仅存于运行内存,你在浏览器的各类持久化存储中自然找不到相关记录
- 刷新页面、新开标签页都会销毁当前Swagger UI的运行实例,内存中的变量会被直接清空,授权状态也就丢失了
业务开发补充说明
官方教程没有提及这部分逻辑,是因为token的存储、请求头拼接属于客户端实现范畴,FastAPI作为后端框架只负责服务端的token校验逻辑,不会对客户端实现做强制约束。实际开发自有前端项目时,常见的处理方案为:
- 拿到后端返回的access_token后,根据业务安全需求选择存储位置:需要长期留存可存localStorage,仅当前标签页生效存sessionStorage,要防XSS攻击可选HttpOnly Cookie
- 封装前端请求工具的拦截逻辑(比如axios请求拦截器),每次发请求前从存储位置读取token,自动拼接到
Authorization请求头中即可
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

