asyncdefget_current_user(token: str = Depends(oauth2_scheme)): user = decode_token(token) if user.disabled: raise HTTPException(400, "用户未激活") return user
asyncdefcheck_admin(user: User = Depends(get_current_user)): ifnot user.is_admin: raise HTTPException(403, "权限不足") return user
@app.get("/admin") asyncdefadmin_panel(admin: User = Depends(check_admin)): return {"status": "管理员权限认证通过"}
支持构建多层级验证链(用户存在性→激活状态→权限等级)
每个依赖项可复用,避免重复验证逻辑
错误响应自动传递,中断后续验证流程
4.生产环境注意事项
密码存储:使用 passlib 库的Bcrypt算法哈希密码,禁止明文存储
令牌安全:采用JWT签名算法(HS256/RS256),设置合理有效期
传输安全:必须启用HTTPS防止中间人攻击
速率限制:对 /token 端点实施请求频率控制
日志审计:记录登录失败事件和可疑Token使用情况
测试命令示例:
1 2 3 4 5
# 获取访问令牌 curl -X POST -d "username=admin&password=secret" http://localhost:8000/token