0%

FastAPI自学教程(36) - 安全机制第一步

1.基础用法

1
2
3
4
5
6
7
8
9
from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/items/")
async def read_items(token: str = Depends(oauth2_scheme)):
return {"token": token}
  • 使用 OAuth2PasswordBearer 创建基于OAuth2密码流的认证方案
  • tokenUrl="token" 指定客户端获取令牌的端点路径
  • 通过 Depends() 将安全方案注入路径操作函数
  • 自动在Swagger UI生成认证表单和Authorize按钮

流程图:

graph TD
    A[客户端请求] --> B{Header包含Bearer Token?}
    B -->|是| C[提取Token传递给路由函数]
    B -->|否| D[返回401未授权错误]
    C --> E[返回包含Token的响应]

2.进阶特性

1
2
3
4
5
6
7
8
9
# 添加自定义验证逻辑
async def verify_token(token: str = Depends(oauth2_scheme)):
if not validate_token(token):
raise HTTPException(status_code=403, detail="无效令牌")
return token

@app.get("/secure-items/")
async def secure_items(valid_token: str = Depends(verify_token)):
return {"status": "认证通过"}
  • 添加类型注解(如 Depends)自动实现:
    • 请求解析:从Authorization请求头提取Bearer Token
    • 数据验证:通过自定义验证函数检查Token有效性
    • 错误处理:自动生成401/403错误响应
  • 支持多层依赖注入,可组合多个安全验证步骤

注意事项

  1. 依赖安装:需安装python-multipart处理表单数据
  2. 生产环境
    • 必须使用HTTPS传输敏感数据
    • 推荐使用JWT代替简单Token
  3. 文档集成:自动生成的OpenAPI文档包含安全方案说明

测试命令示例:

1
curl -X GET -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8000/items/