19828端口的钥匙:LLM Wiki API Token生成、校验与安全最佳实践
【免费下载链接】llm_wikiLLM Wiki is a cross-platform desktop application that turns your documents into an organized, interlinked knowledge base — automatically. Instead of traditional RAG (retrieve-and-answer from scratch every time), the LLM incrementally builds and maintains a persistent wiki from your sources。项目地址: https://gitcode.com/GitHub_Trending/ll/llm_wiki
LLM Wiki 是一款跨平台桌面知识库应用,能把散落的文档自动编织成互相链接的 wiki。它的内置本地 HTTP API 监听在19828 端口(http://127.0.0.1:19828),而API Token就是打开这扇门的钥匙。本文带你看懂:如何在设置页一键生成 Token、服务端如何校验它,以及哪些安全最佳实践必须遵守。
19828 是什么:LLM Wiki 本地 API 的角色
应用启动后,会在127.0.0.1:19828上拉起一个 HTTP 服务,所有接口挂在/api/v1前缀下(端口与地址常量见 api-server-constants.ts,服务端入口见 api_server.rs)。
这个本地 API 覆盖了项目的核心能力:
- 项目与文件:
GET /api/v1/projects、GET /api/v1/projects/{id}/files - 检索与问答:
POST /api/v1/projects/{id}/search、POST /api/v1/projects/{id}/chat - 知识图谱:
GET /api/v1/projects/{id}/graph - 健康检查:
GET /api/v1/health—— 唯一永远无需鉴权的接口,方便随时确认服务是否存活
完整端点目录在设置页中维护,与后端路由保持同步,可参考 api-server-section.tsx。
三步生成 API Token:256 位熵 + 免转义编码
进入设置 → API + MCP,Token 操作只需三步:
- 点击「Generate new token」按钮——前端调用 generateApiToken 生成新令牌;
- 理解它强在哪:使用 Web Crypto API 的
crypto.getRandomValues生成32 字节(256 位)随机数,再做 base64url 编码,结果不含+、/、=,可安全粘贴进 shell、环境变量或请求头; - 保存设置——变更写入本地配置后生效,设置页还会实时提示 Token 强度:少于 16 个字符会被标记为「weak」,建议直接使用内置生成的强令牌。
💡环境变量优先:如果进程环境中设置了LLM_WIKI_API_TOKEN,它会覆盖设置页里的 Token(优先级逻辑见 api_server.rs)。这在多实例或自动化场景下非常有用。
Token 校验机制:三种传递方式 + 恒定时间比较
服务端在 is_token_authorized 中支持三种传递方式,按推荐程度排序:
| 方式 | 示例 | 评价 |
|---|---|---|
①Authorization: Bearer <token> | 请求头 | ✅ 推荐,官方示例均用它 |
②X-LLM-Wiki-Token: <token> | 自定义请求头 | ✅ 可用 |
③ URL 查询参数?token=<token> | …/projects?token=… | ⚠️ 会泄露到 shell 历史、日志和 Referer 头 |
校验本身有两个值得称道的细节:
- 恒定时间比较:constant_time_eq 逐字节异或对比,不提前退出,避免攻击者通过响应耗时差异猜测 Token 的长度或前缀(时序侧信道);
- 按需鉴权 + 全局兜底:普通读取类接口在开启「允许无 Token 访问」后可放行,但Agent chat 端点永远要求 Token(见 is_token_required_request)——对话接口能读写知识库,必须始终设防。
此外,服务还内置了限流(每秒 120 次请求,超出返回 429)与并发上限(64 个在途请求,超出返回 503),防止本地服务被打爆。
安全最佳实践:6 条清单照做
🔒 把 Token 当作项目文件的管理密码来对待:
- 永远优先 Authorization 头,不用
?token=传参——设置页的示例 curl 也刻意采用 Bearer 方式(见 api-server-section.tsx); - 用内置生成的 256 位 Token,不要手写短口令;界面会把 <16 字符的 Token 标记为弱(tokenStrength);
- 「允许无 Token 访问」只对可信本机代理开启——官方提示原文:本机任何进程或浏览器页面都能调用 API;
- 开启局域网访问(监听 0.0.0.0)时必须保留 Token 鉴权,仅在你完全信任该网络时才用;
- MCP 场景走环境变量:把 Token 放入
LLM_WIKI_API_TOKEN环境变量,不要作为命令行参数传递,避免被 shell 历史记录(安全模型说明见 mcp-server/README.md); - 定期轮换 Token:点击重新生成并保存后,旧令牌立即失效(401),这是「驱逐」已泄露令牌的最快手段。
⚠️ 还有一个「总开关」:在设置中关闭本地 API 后,除/health外的所有接口一律返回 503(而非 401),提示调用方退避重试而不是疯狂重试(api_enabled)。
验证 Token 是否生效:快速自检
保存设置后,三步确认钥匙能开门:
- 浏览器打开
http://127.0.0.1:19828/api/v1/health,返回ok: true且能看到authConfigured状态; - 终端执行:
curl -H "Authorization: Bearer 你的Token" http://127.0.0.1:19828/api/v1/projects,应返回项目列表; - 对照检查:不带 Token 访问受保护接口应得401,Token 错误也是401,API 被禁用则是503——三种状态码各不相同,排错时一目了然。
内置的 MCP 客户端会自动附带Authorization: Bearer头,无需手工拼接(实现见 api-client.ts),把上面生成的 Token 配好即可直接驱动整个本地知识库。
小结:19828 是 LLM Wiki 对外的「门」,API Token 是「钥匙」。用内置生成器拿到 256 位强令牌、走 Authorization 头传递、按需授权并及时轮换——四步做到位,你的本地知识库 API 就处在既好用又安全的状态。
【免费下载链接】llm_wikiLLM Wiki is a cross-platform desktop application that turns your documents into an organized, interlinked knowledge base — automatically. Instead of traditional RAG (retrieve-and-answer from scratch every time), the LLM incrementally builds and maintains a persistent wiki from your sources。项目地址: https://gitcode.com/GitHub_Trending/ll/llm_wiki
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考