团队与用户
默认是个人模式:一个部署管理员、一批下游令牌,够用就不需要这一节。
需要多人使用时切到团队模式:成员有自己的账号、自己的 API Key、自己的用量视图,公共渠道与上游凭据仍然只有管理员能碰。
两种模式的区别
| 个人模式 | 团队模式 | |
|---|---|---|
| 登录入口 | /console | /console(管理员与成员统一) |
| 账号 | 只有部署管理员 | 部署管理员 + 团队成员账户 |
| 下游令牌 | 管理员的令牌 | 成员自己的令牌,带团队授权快照 |
| 公共配置 | 管理员 | 管理员;成员不能改公共路由、看不到上游凭据 |
| 用量可见性 | 全部 | 成员只看自己的客户端、令牌、token 明细与费用 |
切回个人模式保留团队数据,但会撤销团队会话并阻止团队 Key 生效。user_id > 0 的 Key 不会降级成个人无限制凭据。
统一登录
控制台不再要求选择管理员或成员,统一填用户名与密码,由服务端识别角色:
- 部署管理员的初始用户名由
ADMIN_USERNAME指定(默认admin),密码仍是ADMIN_TOKEN(轮换列表ADMIN_TOKENS继续有效),TOTP 校验不变。 - 升级后可在网页保存新的管理员用户名:验证口令与 TOTP 后立即生效、重启保留,优先于环境变量。
- 网页保存的用户名不能与团队账号重名。
- 团队账号重名时优先,且密码错误或账号停用时绝不回退到部署管理员。
- 旧的令牌登录 API 保留供兼容使用。
团队成员
成员的权限、数据隔离与 HttpOnly 会话彼此独立。管理侧支持单个与批量导入。
团队码
一张表三种用途(kind):
| 类型 | 用途 |
|---|---|
invite | 邀请码,加入团队 |
credit | 额度码,兑换 token 或金额额度 |
recovery | 恢复码 |
码是 16 位短码(形如 XXXX-XXXX-XXXX-XXXX),哈希存的是去掉分组符、大写化后的原文,所以去横线、小写、加空格都能命中。旧的长 token 存原样哈希,继续兼容。
同一账号重复兑同一个额度码由
(code_id, user_id)唯一索引拦;码的总次数由used_count < max_uses拦。两者在同一个事务里,先过再入账。
第三方登录
支持 GitHub 与 Linux.do。实现上有两个必须理解的边界:
- 端点会分裂成两个视角:
authorize_url由浏览器访问,token_url/userinfo_url由网关访问。自建测试环境时,authorize 要指向浏览器可达的地址,token/userinfo 要指向网关可达的地址。 - 容器环境代理被忽略:OAuth 客户端显式不走
HTTP_PROXY,只跟随运行设置里的全局代理。容器里的HTTP_PROXY=127.0.0.1:7897指向宿主机,用它访问 GitHub 会connection refused。
密钥约定:
client_secret留空 = 保留已存的值(与其他凭据字段一致);client_id留空 = 移除该 provider(密钥一并清除),这是控制台唯一的删除路径。
团队路由授权
成员可以配置个人路由方案(按模型编排上游),但:
- 授权在最终候选、插件改选与故障转移上都生效;
- 用户方案不写回公共
route_members。