You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用get_token接口返回的JWT认证FastAPI的OpenAPI/Swagger UI页面?

实现用公开get_token令牌认证OpenAPI页面的方案

方法1:手动在Swagger UI中输入令牌

这是最直接的临时方案,步骤简单:

  • 先调用公开的get_token端点拿到JWT令牌,比如用命令行:
    curl -X POST "http://你的API域名/get_token" -H "Content-Type: application/x-www-form-urlencoded" -d "username=你的账号&password=你的密码"
    
  • 打开FastAPI的/docs页面,点击右上角的Authorize按钮
  • 在弹出框里选Bearer类型,把拿到的JWT直接粘贴到输入框(不用加Bearer 前缀,Swagger UI会自动补全)
  • 点Authorize确认,之后页面上所有受保护的端点都会自动带上这个令牌发起请求,和用内置认证按钮的效果完全一致

方法2:修改FastAPI配置,让Swagger UI自动调用get_token

如果想让用户在Swagger UI里直接完成认证流程,不用手动复制令牌,可以自定义Swagger的初始化配置:

from fastapi import FastAPI
from fastapi.openapi.docs import get_swagger_ui_html

app = FastAPI(docs_url="/docs")

# 重写默认的/docs路由,自定义Swagger UI配置
@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui():
    return get_swagger_ui_html(
        openapi_url=app.openapi_url,
        title=f"{app.title} - 接口文档",
        swagger_ui_init_oauth={
            "tokenUrl": "/get_token",  # 指定你的公开令牌端点
            "clientId": "你的OAuth2客户端ID",  # 没有的话可以留空
            "scopes": [],
            "usePkceWithAuthorizationCodeGrant": False
        }
    )

修改后,用户点击Authorize按钮时,Swagger UI会自动调用你配置的get_token端点,输入用户名密码后就能直接完成页面认证,和内置认证逻辑完全对齐。

方法3:浏览器控制台手动注入令牌(临时测试用)

如果只是自己测试,不想走流程,可以直接在浏览器控制台把令牌塞进Swagger的存储:

  • 先拿到JWT令牌,比如const token = "你的JWT字符串"
  • 在/docs页面按F12打开控制台,输入:
    localStorage.setItem("swagger-ui-auth", JSON.stringify({
      "Bearer": {
        "value": token,
        "name": "Bearer",
        "type": "http"
      }
    }));
    
  • 刷新页面,Swagger UI会自动读取这个存储的令牌,所有受保护端点都会自动带上认证头

核心原理

FastAPI的Swagger UI是靠浏览器的localStorage保存认证状态的,只要把JWT令牌按照Swagger的格式存入swagger-ui-auth这个key,页面就会自动识别并应用到所有请求,和用内置Authorize按钮的效果一模一样。

内容的提问来源于stack exchange,提问作者writes_on

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:15:31