FastAPI端点安全认证实战指南

本教程详细演示如何为FastAPI构建的MLOps应用添加API密钥认证,包含完整代码实现从模型训练到安全部署的全流程,确保只有授权用户能访问预测接口。

FastAPI端点安全认证实战指南

项目初始化

首先创建Python虚拟环境并安装依赖库:

1
2
3
python -m venv venv
source venv/bin/activate
pip install fastapi uvicorn scikit-learn pandas joblib python-dotenv

模型训练

创建train_model.py训练随机森林分类器:

1
2
3
4
5
6
7
from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier
import joblib

X, y = load_wine(return_X_y=True, as_frame=False)
model = RandomForestClassifier(n_estimators=200).fit(X, y)
joblib.dump(model, "wine_clf.joblib")

基础FastAPI应用

构建main.py实现预测接口:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from fastapi import FastAPI
from pydantic import BaseModel
import joblib

app = FastAPI()
MODEL = joblib.load("wine_clf.joblib")

class WineRequest(BaseModel):
    data: List[List[float]]
    
@app.post("/predict")
async def predict(payload: WineRequest):
    return {"predictions": MODEL.predict(payload.data).tolist()}

实现API密钥认证

  1. 创建.env文件存储密钥:
1
API_KEY=your_secure_key
  1. 更新main.py添加认证逻辑:
1
2
3
4
5
6
7
from fastapi.security import APIKeyHeader

api_key_header = APIKeyHeader(name="X-API-Key")

async def verify_key(api_key: str = Depends(api_key_header)):
    if api_key != os.getenv("API_KEY"):
        raise HTTPException(status_code=401)
  1. 保护预测端点:
1
2
3
@app.post("/predict", dependencies=[Depends(verify_key)])
async def predict(payload: WineRequest):
    [...]

测试验证

  • 无密钥请求返回401错误
  • 错误密钥返回401错误
  • 正确密钥示例:
1
2
3
curl -X POST http://localhost:8000/predict \
     -H "X-API-Key: your_secure_key" \
     -d '{"data":[[14.23,1.71,2.43,15.6,127,2.80,3.06,0.28,2.29,5.64,1.04,3.92,1065]]}'

生产建议

  • 使用环境变量管理敏感信息
  • 考虑集成OAuth2进行更复杂的权限控制
  • 部署时启用HTTPS加密通信
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计