当前位置: 首页 > news >正文

fastapi: 给docs文档添加用户名密码验证

一,代码:

说明:

如果生产环境中确实需要让外部客户或内部运营人员查看文档,但又不能公开,加上“用户名/密码”是最轻量高效的方案。
FastAPI 本身并没有给 /docs 内置开关,但我们可以通过关闭默认路由,改为手动重写 docs 接口并注入安全依赖来实现。

效果: 任何人访问 /docs 时,浏览器会自动弹出一个原生的输入框要求输入账号密码,只有验证通过才能看到文档。

# 创建FastAPI应用,并传入 lifespan
# 1. 初始化时禁用默认的 docs 路由
api_app = FastAPI(title="我的API项目",docs_url=None, redoc_url=None, openapi_url=None)security = HTTPBasic()# 2. 账号密码校验函数
def datetime_verify_docs(credentials: HTTPBasicCredentials = Depends(security)):# 使用 secrets.compare_digest 防范计时攻击 (Timing Attacks)correct_username = secrets.compare_digest(credentials.username, "admin")correct_password = secrets.compare_digest(credentials.password, "123456")if not (correct_username and correct_password):raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,detail="用户名或密码错误",headers={"WWW-Authenticate": "Basic"},)return credentials.username# 3. 手动重写 /openapi.json 并加锁
@api_app.get("/openapi.json", include_in_schema=False)
async def get_open_api_endpoint(username: str = Depends(datetime_verify_docs)):return get_openapi(title=api_app.title, version=api_app.version, routes=api_app.routes)# 4. 手动重写 /docs 并加锁
@api_app.get("/docs", include_in_schema=False)
async def get_documentation(username: str = Depends(datetime_verify_docs)):return get_swagger_ui_html(openapi_url="/api/openapi.json",title=api_app.title + " - Docs",# 【核心修正 3】:静态资源路径也必须拼接 root_path,否则会去根目录下找,导致404或找错swagger_js_url=f"/static/swagger/swagger-ui-bundle.js",swagger_css_url=f"/static/swagger/swagger-ui.css",swagger_favicon_url=f"/static/swagger/favicon.png")

 

 

二,测试效果:

image

http://www.jsqmd.com/news/1243987/

相关文章:

  • 2026年7月麦克维尔空调售后服务电话24小时全新专属热线升级公示最新说明 - 家电技术百科
  • 广州新房除甲醛哪家正规?本地实地走访三家品牌横评 - 环保除醛知识库
  • 【AI口播视频爆款公式】:20年视频算法专家亲授3大优化维度、7个致命误区、90%创作者忽略的语音-画面协同黄金比
  • ELF interpreter /lib64/ld-linux-x86-64.so.2 not found, error 2问题解决以及localsentd软件在Ubuntu兼容层的安装
  • 爱回收买二手电脑靠谱吗?联想拯救者R9000P 2021实测,游戏本能不能买二手 - 资讯快报
  • 数字环保产业领路人|越华环保王长历职称、技术成果、产学研体系全解析
  • ComfyUI-LTXVideo终极指南:本地AI视频生成完整教程
  • OpenRouter:13亿美元估值背后,能否在多模型时代守住价值?
  • 2026年7月最新欧米茄长沙北辰三角洲大悦城维修保养服务电话 - 欧米茄官方服务中心
  • 香材哪家性价比高:问菩文创原材划算 - 松梢月冷
  • 2026年7月美度**金华售后服务最新网点地址及客服热线通知 - 亨得利官方服务中心
  • 动态表达式解析器(DynamicExpresso)完整指南:如何在.NET中实现运行时C表达式执行
  • 商丘网站建设商丘老板别踩坑,这几点不搞清楚就是扔钱
  • 爱回收买二手华为靠谱吗?Mate 60 Pro二手入手全记录,卫星通话和麒麟9000S能正常用吗 - 资讯快报
  • 英语(一)心计算机-固定搭配—东方仙盟
  • 为什么选择RPCS3:3个让你在电脑上重温PS3游戏的理由
  • 飞书AI审批响应延迟>3秒?性能压测报告曝光:Redis缓存穿透+LLM Token预分配的双重优化方案
  • Liquid模板引擎终极指南:在React/Vue中构建安全动态内容
  • 全球AI行业“挤泡沫”:股价暴跌、应用局限,未来发展路径待重塑
  • 拒绝“黑盒”幻觉:GPT-7时代下,Java后端如何构建可解释的LLM推理流水线
  • 2026年广州10大刑事律师机构推荐!广东冠理律师事务所实力领先 - 十大品牌榜
  • 告别AI编程混乱:4大原则教你写出简洁高效的代码
  • 2026年大健康需求持续升温 健康管理公司服务维度全景观察
  • AI写作工具在学术研究中的应用与优化策略
  • 劳力士**服务项目及价格查询|热线与门店地址**信息通知(2026年7月最新) - 劳力士服务中心
  • 从BERT到RAG再到混合检索,AI搜索服务选型全链路拆解,中小团队如何用1/3预算拿下95%召回率?
  • GitHub Release终极指南:3分钟掌握命令行发布神器
  • 突破性AI伴侣技术:Open-LLM-VTuber深度架构解析
  • 2026 年现阶段石城可靠的贵金属回收公司哪家可靠,揭秘:你的老物件能换来多少真金白银?-钯碳鑫再生回收 - 企业推荐管【认证】
  • 2026年无锡滨湖区大健康 细胞存储及慢病干预服务机构情况梳理