[Bug] 知识库 API 全部返回 403:路由要求的 scope `kb` 不在 ALL_OPEN_API_SCOPES 白名单内
维护者通常 1 天内回复
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 78/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- python
- 领域
- api, authorization
调研方向
从 astrbot/dashboard/api/knowledge_bases.py 中的 require_kb_scope 开始,然后将 astrbot/dashboard/services/auth_service.py 中的 scope 定义与 astrbot/dashboard/api/auth.py 中的验证进行比较。使用具有 kb 或 * scope 的 API 密钥重现请求,使路由与允许的 scope 保持一致,并验证知识库 API 调用不再返回 403。
由索引模型根据 Issue 内容生成。
描述
问题描述
知识库相关接口(/api/v1/knowledge-bases/*)无法通过任何 API Key 调用,必然返回 403。
原因有两处互相矛盾:
- 知识库路由要求 scope 为
"kb"; - 但
"kb"并不在ALL_OPEN_API_SCOPES白名单里,而校验函数在 scope 不在白名单时直接抛 403。
即:这个 scope 值在框架内无法被授予,因此该组接口对 API Key 永久不可达。仅通过 Dashboard 登录态(JWT)可访问,因为 JWT 分支直接授予 scopes=["*"]。
如何复现
- 创建一个 API Key,scopes 设为
["kb"](或["*"]):
INSERT INTO api_keys (created_at, updated_at, key_id, name, key_hash, key_prefix, scopes, created_by, expires_at)
VALUES (..., '["kb"]', ...);
- 调用知识库接口:
curl -H "X-API-Key: $KEY" http://127.0.0.1:6185/api/v1/knowledge-bases
- 实际结果:
{"status":"error","message":"Insufficient API key scope"}
HTTP 403。即使把 scopes 设为 ["*"] 也一样 —— 因为在检查 scopes 内容之前,scope 本身先被白名单拦下了。
代码定位
- 路由要求 scope 为
kb:dashboard/api/knowledge_bases.py:39async def require_kb_scope(request: Request) -> AuthContext: return await require_scope(request, "kb") - 白名单不含
kb:dashboard/services/auth_service.py:58 - 校验直接 403:dashboard/api/auth.py:137
if scope not in ALL_OPEN_API_SCOPES: raise ApiError("Insufficient API key scope", status_code=403)
期望行为
三选一即可:
- 在
DEFAULT_OPEN_API_SCOPES中补上"kb"(最小改动,与file/data等数据类 scope 一致); - 或让知识库路由改用已有的某个 scope;
- 或让 Dashboard API Key 创建界面里可授予的 scope 与路由实际使用的 scope 对齐(当前界面无法覆盖
kb)。
影响
所有依赖知识库接口的自动化场景不可用:批量导入文档、从 URL 导入、检索、文档与分块增删查。
目前只能绕过 HTTP 层,在插件内部直接调用 context.kb_manager 完成同样操作,但这要求使用者自己写插件,普通用户无路可走。
环境
- AstrBot 版本:4.28.2
- 部署方式:Linux / systemd
- 可稳定复现:100%
如判断有误(该 scope 存在其它授予途径而我未找到),欢迎指出。
- 主要语言
- Python
- 星标
- 43.2k
- 派生
- 3.2k
- 平均合并
- 22 小时 58 分钟
- 30 天内合并 PR
- 153
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
AstrBotDevs/AstrBot 的其他 Issue
-
[Bug] OpenAI-compatible Gemini 工具 schema const 导致 400可能已有人在做 @arccat-114 于 4 天前认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 77/100
AstrBotDevs/AstrBot#10720 · 1 条评论 ·
维护者通常 1 天内回复
-
[Bug] Discord slash command sync aborts with KeyError when a plugin handler is defined in a submodule可能已有人在做 @yuexia5 于 9 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 77/100
AstrBotDevs/AstrBot#10626 · 1 条评论 ·
维护者通常 1 天内回复
-
[Bug] QQ频道消息无法回复:markdown 回退顺序有误,误用主动消息导致 304049 限频可能已有人在做 @he-yufeng 于 21 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
AstrBotDevs/AstrBot#10420 · 4 条评论 ·
维护者通常 1 天内回复
-
[Feature] 移除「切换到旧版知识库」入口可能已有人在做 @lingyun14beta 于 17 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
AstrBotDevs/AstrBot#10340 · 1 个 reaction ·
维护者通常 1 天内回复
-
[Bug] WebChat 聊天偏好在刷新后重置:流式输出、显示思考内容及发送快捷键可能已有人在做 @C10H14N2O5 于 26 天前认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 78/100
AstrBotDevs/AstrBot#10316 · 2 条评论 ·
维护者通常 1 天内回复
查看 AstrBotDevs/AstrBot 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
btclib-org/btclib-node#2132 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 76/100
freelawproject/juriscraper#2367 · 2 条评论 ·
维护者通常 1 天内回复
-
infra tech-debt
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
needs-triage
难度 1/5 1 小时以内 新手友好度 78/100
gke-labs/kube-agents#4190 ·
维护者通常 1 天内回复