Skip to content

fix: 修复 Authorization header 鉴权失效等问题 (HTTP/WS 鉴权) + 版本 1.0.1 - #108

Merged
This-is-XiaoDeng merged 1 commit into
ITCraftDevelopmentTeam:masterfrom
This-is-XiaoDeng:fix/http-auth-headers
Aug 13, 2026
Merged

fix: 修复 Authorization header 鉴权失效等问题 (HTTP/WS 鉴权) + 版本 1.0.1#108
This-is-XiaoDeng merged 1 commit into
ITCraftDevelopmentTeam:masterfrom
This-is-XiaoDeng:fix/http-auth-headers

Conversation

@This-is-XiaoDeng

Copy link
Copy Markdown
Member

修复内容

1. Authorization: Bearer 鉴权完全失效(核心修复)

  • 现象:用标准 Authorization: Bearer <token> 头的 OneBot 客户端请求 HTTP API 永远得到 401;只有 `?access_token=*** 查询参数能通过
  • 根因:uvicorn 按 ASGI 规范 会把 header 名转为小写存入 scope,而 verify_access_token"Authorization" in request.headers.keys()大小写敏感的成员判断 → 永远匹配不上
  • 修复:新增 get_bearer_token(),遍历 headers.items() 逐项比较 key.lower(),不依赖 starlette 内部大小写行为;verify_access_token 与 v11 HTTP/WS 的 401/403 区分逻辑全部改用它

2. 「未配置 Access Token !」警告逻辑反转

  • check_access_token()已配置 token 时反而报警告(条件缺 not),v11/v12 的 HTTP 与 WS 服务器全部修正

3. v12 HTTP 鉴权判断反向(历史遗留,自 PR #56 起)

  • handle_http_connection 原来写的是 if verify_access_token(...): raise 401 —— 鉴权成功反而被拒,鉴权失败反而放行;已修正为 if not ...

4. 版本号 1.0.0 → 1.0.1(发布前置)

验证

  • 单元测试 6 例(小写 key / 大写 key / 错误 token / query 参数 / 无凭证 / 未配置 token)全部通过
  • 源码运行 + 真实 Discord 登录后实测:
    • 正确 Bearer header → 200(修复前 401)
    • 错误 token → 403
    • 无凭证 → 401
    • query 参数 → 200(无回归)
    • get_version_infoapp_version: 1.0.1
  • 冒烟测试断言不受影响(继续用 ASCII 文本)

问题:uvicorn 按 ASGI 规范把 header 名转为小写存入 scope,而代码用
"Authorization" in request.headers.keys() 做大小写敏感判断,永远匹配不上,
导致所有用标准 Authorization: Bearer 头的 OneBot 客户端被 401 拒绝
(只有 ?access_token= 查询参数能过)。

修复:
- authentication.py: 新增 get_bearer_token(),逐项比较 key.lower(),
  不依赖 starlette 内部大小写行为;verify_access_token 改用它
- v11/http.py + v11/ws.py: 403/401 区分逻辑同样改用 get_bearer_token()
- v11/v12 http/ws: check_access_token 警告条件反转(原来在已配置 token 时
  反而报「未配置 Access Token !」)
- v12/http.py: 鉴权判断反向(原来鉴权成功反而 401,自 PR ITCraftDevelopmentTeam#56 起一直如此)
- pyproject.toml: 1.0.0 -> 1.0.1

验证:单元测试 6 例通过;源码运行真实登录后,Bearer header 200 / 错 token
403 / 无凭证 401 / query 参数 200
@github-actions
github-actions Bot requested a review from montmorill August 13, 2026 07:16
@This-is-XiaoDeng
This-is-XiaoDeng merged commit 5add58b into ITCraftDevelopmentTeam:master Aug 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant