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错误响应
- 支持多层依赖注入,可组合多个安全验证步骤
注意事项
- 依赖安装:需安装
python-multipart处理表单数据
- 生产环境:
- 必须使用HTTPS传输敏感数据
- 推荐使用JWT代替简单Token
- 文档集成:自动生成的OpenAPI文档包含安全方案说明
测试命令示例:
1
| curl -X GET -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8000/items/
|