Skip to content

用户、API Key 与权限

用户是权益和审计主体,API Key 是模型网关凭证。登录 JWT 与模型 API Key 是两套不同认证体系。

用户字段决定什么

字段作用
email / identity登录与账号绑定
role普通用户或管理员
status是否允许登录和调用
balance可扣减余额
frozen_balance异步任务预占金额
concurrency用户同时执行的请求数
rpm_limit分组未设置 RPM 时的用户兜底值
allowed_groups独占或指定分组权限
platform_quotas用户在各平台的日/周/月费用限制
TOTP登录二次验证

管理员修改用户余额、状态、并发或授权后,要确认鉴权缓存已经失效。多实例环境中可在不同副本各发送一次测试请求,排除局部旧缓存。

登录认证与网关认证

Web 登录

用户通过 /api/v1/auth/* 登录,获得访问和刷新 token,用于管理后台和用户 API。

模型请求

客户端把 Sub2API Key 放在常见认证头中。API Key middleware 解析后加载用户、Key、分组和订阅快照。

两者的差别:

  • 修改登录密码不会自动更换模型 API Key。
  • 删除或禁用 API Key 不应注销 Web 登录。
  • JWT secret 影响后台会话;API Key 数据存储在数据库。

API Key 生命周期

  1. 用户创建 Key,并选择有权限的分组。
  2. 系统生成唯一 key,写入 PostgreSQL。
  3. 客户端使用 Key,鉴权快照进入 L1/Redis 缓存。
  4. 请求更新 last_used_at 和 quota usage。
  5. 用户可以修改名称、分组、IP ACL、额度或到期时间。
  6. 禁用或软删除后触发缓存失效。

真实 key 应只在创建或必要页面显示。截图、工单和日志中都应脱敏。

API Key 限制

总额度

text
quota = 0       不限制 Key 总费用
quota > 0       quota_used 必须小于 quota

总额度只是 Key 层限制。即使 Key 还有 quota,用户余额或订阅也可能已经不足。

时间窗口

Key 可以设置:

  • 5 小时费用上限。
  • 1 天费用上限。
  • 7 天费用上限。

每个窗口保存开始时间和已用费用。重置不是定时把所有 Key 清零,而是在读取或更新时根据窗口是否过期推进。

到期时间

expires_at 为空表示不过期。临时发放给脚本、测试人员或外部合作方时应设置到期时间。

IP ACL

  • whitelist 非空时,只允许匹配的 IP/CIDR。
  • blacklist 用于显式拒绝地址。
  • 真实 IP 是否可信取决于反向代理和 trust_forwarded_ip_for_api_key_acl

如果应用直接信任任意客户端传入的 X-Forwarded-For,攻击者可能绕过 IP ACL。只有流量必经受控代理时才开启转发 IP 信任。

分组权限判断

创建或修改 Key 时,系统会综合:

  • 分组是否 active。
  • 是否为独占分组。
  • 用户是否在 allowed groups。
  • 分组平台和系统策略。
  • 管理员是否显式分配。

Key 绑定了后来被禁用或删除的分组时,请求会失败;不会自动选择任意其他分组。

用户并发与排队

用户并发槽位在具体账号选择之前获取,避免一个用户占满整个账号池。达到上限后可能等待,并通过 SSE ping 保持连接。

并发设置太小:Agent 的并行工具调用会频繁排队。设置太大:单个用户可能占用大量上游账号并发。需要结合客户端模式和账号池容量设置。

用户平台配额

平台配额对同一个用户在不同平台分别限制:

text
User 42
├── anthropic: daily / weekly / monthly
├── openai:    daily / weekly / monthly
├── gemini:    daily / weekly / monthly
└── grok:      daily / weekly / monthly

Redis 保存当前窗口快照,后台 flusher 可以批量回写 PostgreSQL。启用 flusher 时需要监控 dirty keys、readd、flush error 和 FK violation。

推荐策略

内部团队

  • 关闭公开注册。
  • 每个人独立用户和 Key。
  • 按团队角色分配分组。
  • 使用平台配额而不是共用一个 Key。

外部用户

  • 默认余额为 0。
  • 注册加 Turnstile 和邮箱验证。
  • Key 默认设置合理并发和到期策略。
  • 新用户只开放低风险分组。
  • 对敏感 API 开启内容审核和 IP 风险监控。

排查清单

Key 返回 401/403 时依次检查:

  1. Key 是否完整、有没有多余空格。
  2. API Key 状态、到期时间和软删除状态。
  3. 用户状态和角色。
  4. IP whitelist/blacklist 与真实客户端 IP。
  5. 分组状态与用户授权。
  6. 多实例鉴权缓存是否已刷新。
  7. 内容审核或客户端类型限制。

本文档用于帮助你理解、部署和运维 Sub2API。使用前请确认上游服务条款与当地法律要求。