这是一个完整的 FastAPI 安全认证教学项目,通过实际代码演示如何在 FastAPI 应用中实现:
- ✅ OAuth2 密码流认证
- ✅ JWT Token 生成和验证
- ✅ 密码加密存储(Bcrypt)
- ✅ 基于角色的访问控制(RBAC)
- ✅ 多层级权限管理
- ✅ RESTful API 设计
通过本项目,你将学会:
- 认证基础:理解 OAuth2 和 JWT 的工作原理
- 安全实践:掌握密码加密、Token 管理等安全技术
- 权限控制:实现不同级别的访问权限管理
- FastAPI 特性:深入使用依赖注入、路由保护等特性
建议按以下顺序阅读文档:
- OAuth2 与 JWT 基础 - 理解核心概念
- 快速开始 - 运行项目
- 认证流程详解 - 深入理解认证机制
- 权限控制 - 学习权限管理
- API 接口文档 - 查看所有接口
- 安全最佳实践 - 生产环境注意事项
FastAPI-secure/
├── app/
│ ├── __init__.py
│ ├── main.py # 应用入口
│ ├── config.py # 配置管理
│ ├── models/ # 数据库模型
│ │ └── user.py
│ ├── schemas/ # Pydantic 模型
│ │ ├── user.py
│ │ └── token.py
│ ├── auth/ # 认证相关
│ │ ├── jwt.py # JWT 处理
│ │ ├── password.py # 密码加密
│ │ └── dependencies.py # 认证依赖
│ ├── routers/ # 路由
│ │ ├── auth.py # 认证路由
│ │ ├── users.py # 用户管理
│ │ └── items.py # 示例资源
│ └── db/ # 数据库
│ ├── database.py # 数据库连接
│ └── init_db.py # 初始化脚本
├── docs/ # 教学文档
├── requirements.txt # 依赖清单
├── .env.example # 环境变量示例
├── run.py # 启动脚本
└── README.md # 本文件
pip install -r requirements.txtcp .env.example .env
# 编辑 .env 文件,修改 SECRET_KEY 等配置python run.py或者:
uvicorn app.main:app --reload打开浏览器访问:
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
项目启动时会自动创建以下测试账号:
| 角色 | 用户名 | 密码 | 说明 |
|---|---|---|---|
| 管理员 | admin |
admin123 |
拥有所有权限 |
| 普通用户 | user1 |
user123 |
基本用户权限 |
| 普通用户 | user2 |
user123 |
基本用户权限 |
curl -X POST "http://127.0.0.1:8000/auth/login" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin&password=admin123"返回:
{
"access_token": "eyJhbGc...",
"token_type": "bearer"
}curl -X GET "http://127.0.0.1:8000/users/me" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"- FastAPI: 现代化的 Python Web 框架
- SQLAlchemy: ORM 数据库操作
- Pydantic: 数据验证
- python-jose: JWT 处理
- passlib: 密码加密
- SQLite: 轻量级数据库
本项目仅用于学习和教学目的。在生产环境中使用前,请注意:
- 修改
SECRET_KEY为强随机字符串 - 使用 PostgreSQL 或 MySQL 替代 SQLite
- 配置 HTTPS
- 实现 Token 刷新机制
- 添加请求限流
- 实现日志记录
- 添加单元测试
本项目仅供学习使用。
欢迎提出问题和改进建议!
开始学习: OAuth2 与 JWT 基础 →