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

如何在FastAPI Swagger UI中通过Authorize按钮传递Bearer令牌授权?

解决Swagger UI适配手机号+OTP授权的问题

你的核心问题是:FastAPI默认的OAuth2PasswordBearer对应OAuth2密码流,Swagger UI会默认显示用户名/密码输入,但你的认证流程是手机号+OTP,想要在Swagger里完成授权并访问/show_results,可以用以下两种方案:


方案1:手动输入Bearer令牌(快速临时解决)

Swagger UI的Authorize按钮支持直接手动填入已获取的Bearer令牌,不需要走默认的密码流:

  • 先调用/send_otp获取OTP,再调用/token接口传入手机号和OTP,拿到返回的access_token。
  • 点击Swagger UI右上角的Authorize按钮,在弹出的窗口中:
    1. 找到Bearer Authentication区域(滚动到窗口下方即可看到)
    2. 在Value输入框中填入:Bearer <你的access_token>(注意Bearer后面加空格)
    3. 点击Authorize完成授权,之后调用/show_results时会自动携带令牌。

方案2:自定义OAuth2表单,让Swagger适配手机号+OTP流程(更规范)

通过自定义请求表单类,让Swagger UI显示手机号和OTP的输入字段,直接在Authorize按钮中完成认证流程:

步骤1:自定义OAuth2请求表单

替换默认的用户名密码表单,改成手机号+OTP结构:

from fastapi import Form

class OAuth2PhoneOTPForm:
    def __init__(
        self,
        phone_number: str = Form(...),
        otp: str = Form(...),
    ):
        self.phone_number = phone_number
        self.otp = otp

步骤2:修改/token接口的参数

用自定义的表单类替换原来的普通参数:

@app.post("/token")
def generate_token(form_data: OAuth2PhoneOTPForm = Depends()):
    # 用form_data.phone_number和form_data.otp执行验证逻辑
    ...
    return {"access_token": encoded_jwt, "token_type": "bearer"}

步骤3:优化OAuth2Scheme配置(可选)

如果需要让Swagger更明确显示认证字段,可以调整Scheme的配置:

from fastapi.security import OAuth2Scheme
from fastapi.openapi.models import OAuthFlows as OAuthFlowsModel
from fastapi.openapi.models import OAuthFlowPassword

oauth2_scheme = OAuth2Scheme(
    flows=OAuthFlowsModel(
        password=OAuthFlowPassword(
            tokenUrl="/token",
            username_field="phone_number",
            password_field="otp"
        )
    ),
    tokenUrl="/token"
)

修改后,点击Swagger的Authorize按钮时,会显示phone_number和otp的输入框,输入对应值后即可自动获取并应用令牌,之后调用/show_results会自动携带认证信息。


验证效果

不管用哪种方案,授权成功后,调用/show_results时,Swagger会自动在请求头中添加Authorization: Bearer <token>,和Postman的测试效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:05:15