FastAPI JWT Auth 项目教程
项目介绍
FastAPI JWT Auth 是一个为 FastAPI 框架提供 JWT(JSON Web Token)认证支持的扩展。它旨在提供一个安全、易于使用且轻量级的认证解决方案。如果你熟悉 Flask-JWT-Extended,你会发现这个扩展非常适合你,因为它受到了 Flask-JWT-Extended 的启发。
项目快速启动
安装
首先,你需要安装 FastAPI JWT Auth 扩展。你可以使用 pip 进行安装:
pip install fastapi-jwt-auth
基本使用
以下是一个简单的示例,展示如何在 FastAPI 应用中使用 FastAPI JWT Auth:
from fastapi import FastAPI, Depends, HTTPException
from fastapi_jwt_auth import AuthJWT
from fastapi_jwt_auth.exceptions import AuthJWTException
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
username: str
password: str
# 配置 JWT
@AuthJWT.load_config
def get_config():
return [
("authjwt_secret_key", "secret"),
]
# 模拟用户数据库
users_db = {
"testuser": "testpass"
}
# 登录接口
@app.post('/login')
def login(user: User, Authorize: AuthJWT = Depends()):
if user.username in users_db and users_db[user.username] == user.password:
access_token = Authorize.create_access_token(subject=user.username)
return {"access_token": access_token}
else:
raise HTTPException(status_code=401, detail="Bad username or password")
# 受保护的接口
@app.get('/protected')
def protected(Authorize: AuthJWT = Depends()):
Authorize.jwt_required()
current_user = Authorize.get_jwt_subject()
return {"logged_in_as": current_user}
应用案例和最佳实践
应用案例
FastAPI JWT Auth 可以用于各种需要用户认证的场景,例如:
- 用户登录系统
- API 访问控制
- WebSocket 授权
最佳实践
- 安全存储密钥:确保你的 JWT 密钥安全存储,不要硬编码在代码中。
- 设置合理的过期时间:为访问令牌和刷新令牌设置合理的过期时间,以平衡安全性和用户体验。
- 使用 HTTPS:确保所有与认证相关的通信都通过 HTTPS 进行。
典型生态项目
FastAPI JWT Auth 可以与其他 FastAPI 生态项目结合使用,例如:
- FastAPI Users:一个用于用户管理、认证和授权的库。
- FastAPI SQLAlchemy:一个用于与 SQLAlchemy 集成的库,方便进行数据库操作。
- FastAPI Mail:一个用于发送电子邮件的库,可以用于发送验证邮件等。
通过这些生态项目的结合,你可以构建一个功能完善、安全可靠的 FastAPI 应用。