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

FastAPI与JWT令牌认证问题:无法验证凭据

问题

使用Python 3.10.8 + FastAPI 0.95.1构建API,按官方安全文档实现JWT认证后,请求需要授权的端点时出现401错误,提示Could not validate credentials。通过Chrome开发者工具发现请求头的Authorization字段为Bearer undefined,get_current_user()函数收到的令牌值是字符串"undefined"。

已确认/token端点能正确生成JWT,但自动生成的OpenAPI文档(Swagger UI)发起请求时未正确携带令牌。核心代码片段如下:

登录接口返回逻辑:

# main.py 中 login_for_access_token 函数的返回
return {"accessToken": access_token, "tokenType": "bearer"}

OAuth2认证依赖定义:

# dependencies.py
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

解决方案

问题根源是登录接口返回的令牌字段名不符合OAuth2规范,导致Swagger UI无法自动识别并携带令牌,按以下步骤修复:

  • 修正登录接口的返回字段名:FastAPI的OAuth2PasswordBearer组件遵循OAuth2标准,期望令牌接口返回access_token(下划线命名)而非accessToken,token_type而非tokenType。修改返回逻辑:
return {"access_token": access_token, "token_type": "bearer"}
  • 同步更新Token响应模型:确保你的TokenPydantic模型字段名与返回值一致:
from pydantic import BaseModel

class Token(BaseModel):
    access_token: str
    token_type: str
  • 验证认证流程:修改后重启服务,在Swagger UI中操作:
    1. 调用/token接口获取符合规范的令牌响应
    2. 点击页面右上角的Authorize按钮,粘贴令牌(Swagger会自动添加Bearer 前缀)
    3. 再次请求需要授权的端点,此时请求头会正确携带有效JWT,认证即可通过

额外检查:确认oauth2_scheme的tokenUrl参数与实际登录端点路径完全一致(当前代码中tokenUrl="token"对应/token端点,若端点有前缀需同步调整)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:58:19