FastAPI安全认证:从密码到令牌的魔法之旅
title: FastAPI安全认证:从密码到令牌的魔法之旅
date: 2025/06/02 13:24:43
updated: 2025/06/02 13:24:43
author: cmdragon
excerpt:
在FastAPI中实现OAuth2密码流程的认证机制。通过创建令牌端点,用户可以使用用户名和密码获取JWT访问令牌。代码示例展示了如何使用CryptContext
进行密码哈希处理,生成和验证JWT令牌,并实现安全路由保护。此外,还提供了JWT令牌的结构解析、常见报错解决方案以及安全增强建议,如使用HTTPS传输令牌和从环境变量读取密钥。最后,通过课后Quiz巩固了关键概念。
categories:
- 后端开发
- FastAPI
tags:
- FastAPI
- OAuth2
- JWT
- 安全认证
- 密码哈希
- 令牌校验
- 访问控制


扫描二维码)
关注或者微信搜一搜:编程智域 前端至全栈交流与成长
探索数千个预构建的 AI 应用,开启你的下一个伟大创意:https://tools.cmdragon.cn/
第一章:FastAPI安全认证核心实现
(注:根据写作规范要求,章节编号从第一章开始编排)
一、令牌端点(Token Endpoint)的创建
1.1 OAuth2密码流程原理
OAuth2密码流程(Password Grant)是直接通过用户名密码获取访问令牌的认证方式。类比演唱会验票流程:用户先到售票处(令牌端点)用身份证(凭证)换取门票(令牌),之后凭门票入场(访问资源)。
流程步骤:
- 客户端发送用户名密码到
/token
端点 - 服务器验证凭证有效性
- 生成包含用户身份和有效期的JWT令牌
- 返回访问令牌给客户端
1.2 FastAPI端点实现
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel
from datetime import datetime, timedelta
from jose import JWTError, jwt
from passlib.context import CryptContextrouter = APIRouter(tags=["Authentication"])# 密码哈希配置(使用bcrypt算法)
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")# JWT配置(实际项目应从环境变量读取)
SECRET_KEY = "your-secret-key-keep-it-secret!"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30# 用户模型
class UserCreate(BaseModel):username: strpassword: str# 令牌响应模型
class Token(BaseM