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

FastAPI中Authorization请求头未携带,/docs无法发送该请求头

问题分析与解决方案

你代码里的两个Authorization头作用完全不同:

  • 在responses的200配置里定义的是接口响应会返回的头,和请求时需要携带的头无关;
  • 函数参数里的token: Union[str, None] = Header(alias="Authorization",default=None)才是请求头参数,但因为设置了default=None,FastAPI将其标记为非必填项,默认在/docs页面的请求参数区不会展开显示,导致测试时容易忽略,没手动填写就发送请求,自然不会带上这个头。

解决步骤

1. 明确请求头的必填性

如果这个Authorization头是接口要求必填的,把default=None改成...(表示必填),这样FastAPI会在/docs页面强制显示这个参数,测试时必须填写才能发送请求:

token: str = Header(alias="Authorization")
# 或者更明确的写法
token: Union[str, None] = Header(alias="Authorization", default=..., description="格式为 Token <你的令牌>")

2. 可选请求头的文档优化

如果是可选请求头,但希望/docs页面明确显示这个参数,添加description字段说明格式,测试时记得手动展开Headers区域填写值:

token: Union[str, None] = Header(
    alias="Authorization", 
    default=None, 
    description="授权令牌,格式为 Token <你的令牌>"
)

3. 修正响应头的描述(可选)

你当前在responses里的Authorization描述写的是"Token party",建议改成更清晰的说明,比如"接口返回的授权令牌",避免和请求头混淆。

修正后的完整代码示例

from typing import Union, List
from fastapi import Header, Request, Response, APIRouter
import json
import config
import models

router = APIRouter()

@router.get('/versions', tags=["Credentials"], responses={
        200: {
            "model": List[models.versions_info],
            "description": "返回版本列表",
            "headers": {"Authorization": {"description":"接口返回的授权令牌","type":"string"}}
        }})
async def list_versions(
    request: Request,
    token: Union[str, None] = Header(
        alias="Authorization", 
        default=None, 
        description="请求携带的授权令牌,格式为 Token <你的令牌>"
    )
): 
    print(token)
    out = [
        {"version": "2.1.1","url": "https://www.server.com/ocpi/2.1.1/"},
        {"version": "2.2","url": "https://www.server.com/ocpi/2.2/"}
    ]
    return Response(
        status_code=200,
        content=json.dumps(out), 
        media_type="application/json", 
        headers={"Authorization": f"Token {config.globals['mytoken']}"}
    )

测试注意事项

在/docs页面测试时,非必填的请求头默认不会显示,需要点击请求区域的Headers按钮展开,找到Authorization并填写对应的值,再发送请求,这样头才会被携带。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:30:54