agent-Specialization/api_doc/auth.md

3.2 KiB
Raw Blame History

认证与 API 用户JSON 手动维护)

本项目的 API v1 使用 Bearer Token 鉴权,且 API 用户与网页用户完全隔离

1. 鉴权方式(每个请求都要带)

请求头:

Authorization: Bearer <TOKEN>

服务端会对 <TOKEN>SHA256,与 data/api_users.json 中保存的 token_sha256 进行匹配。

2. API 用户配置文件

路径:

  • data/api_users.json

格式(示例):

{
  "users": {
    "api_jojo": {
      "token_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "created_at": "2026-01-23",
      "note": "for flutter app"
    }
  }
}

字段说明:

  • users对象key 是 API 用户名(建议全小写、只包含字母数字下划线/连字符)。
  • token_sha256必填token 的 SHA256 十六进制字符串。
  • created_at / note:可选,仅用于记录与审计。

注意:

  • 当前实现为启动时加载该 JSON如果你修改了 data/api_users.json,请重启服务使其生效。

3. 生成 token_sha256 的方法

3.1 用 Python 生成

python3 - <<'PY'
import hashlib
token = "YOUR_TOKEN"
print(hashlib.sha256(token.encode("utf-8")).hexdigest())
PY

把输出粘到 token_sha256

3.2 token 建议

  • 长度建议:>= 32 字符(越长越好)
  • 生成建议:使用密码管理器或安全随机源生成
  • 存储建议客户端侧使用系统安全存储Keychain/Keystore不要写死在前端代码里

4. API 用户的独立落盘目录

每个 API 用户会创建独立工作区,默认根目录:

  • api/users/<api_username>/

典型结构:

api/users/<api_username>/
  project/
    user_upload/              # API 上传文件只能落在这里(以及其子目录)
    ...                       # 智能体运行产生的项目文件也在 project 下
  data/
    conversations/            # 对话 JSON 落盘目录
    memory.md
    task_memory.md
    ...
  logs/

对话文件示例路径:

  • api/users/api_jojo/data/conversations/conv_20260123_234245_036.json

对话 JSON 结构(简化示例):

{
  "id": "conv_20260123_234245_036",
  "title": "新对话",
  "created_at": "2026-01-23T23:42:45.036Z",
  "updated_at": "...",
  "messages": [
    { "role": "user", "content": "你好", "timestamp": "..." },
    { "role": "assistant", "content": "…", "reasoning_content": "", "timestamp": "..." },
    { "role": "tool", "name": "web_search", "content": "{...}", "timestamp": "..." }
  ],
  "metadata": { "run_mode": "fast", "model_key": "kimi", "...": "..." }
}

说明:

  • API v1 没有提供“读取历史对话”的 HTTP 接口;如确实需要历史,请直接读落盘文件或后续再加只读接口。

5. 安全注意事项

  • Bearer Token 等同密码:不要放到 Git、不要发到日志、不要在网页端暴露。
  • 如果怀疑泄露:替换 token更新 JSON重启服务旧 token 会立即失效。
  • 生产环境建议:
    • 通过反向代理限制来源 IP
    • 记录 API 调用审计日志(至少记录 user、endpoint、时间、返回码
    • 加入速率限制(避免被刷)。