# 用户与访问管理 ## 模块定位 用户与访问管理负责识别调用者,并决定该调用者可以使用哪些模型、请求应由哪个上游账号处理。 本项目不建立独立的用户账号体系,而是采用最小模型: > 一个 Key 代表一个用户。 管理员直接管理 Key;Key 的稳定 ID 用于关联用量、额度和历史记录,Key 名称用于界面识别,Key 值用于请求认证。 ## 当前能力 | 能力 | 当前实现 | | --- | --- | | Key 创建 | 支持自动生成或手动指定 Key 值 | | Key 状态 | 支持启用、禁用和归档 | | 下游认证 | 支持 `Authorization: Bearer ` 和 `X-Api-Key` | | 模型权限 | 支持允许全部模型、精确模型名和 `*` 通配符 | | 上游路由 | 支持 CPA 自动选择或严格绑定一个上游账号 | | 默认迁移 | 首次启动自动创建 `default` Key,兼容现有调用配置 | | 历史关联 | Key 的请求、用量、额度和账目均按稳定 ID 关联 | ## Key 数据模型 每个 Key 包含以下访问属性: | 属性 | 说明 | | --- | --- | | ID | 系统生成的稳定标识,用于内部关联,不随名称变化 | | 名称 | 管理员可读的用户名称,长度为 1–64 个字符 | | Key 值 | 下游请求凭证;创建后不可修改 | | 状态 | `active`、`disabled` 或 `archived` | | 路由模式 | `auto` 或 `strict` | | 上游账号 | 严格路由时绑定的 CPA 上游账号 | | 模型规则 | 允许全部模型,或一组模型匹配规则 | Key 值允许 6–256 个非空白、非控制字符。未手动填写时,系统生成以 `cpa_` 开头的随机值。 ## 状态规则 | 状态 | 是否可以调用 | 是否可以编辑 | 是否保留历史 | 是否可以恢复 | | --- | --- | --- | --- | --- | | `active` | 是 | 是 | 是 | 不适用 | | `disabled` | 否 | 是 | 是 | 可以重新启用 | | `archived` | 否 | 否 | 是 | 不可以 | 禁用用于临时停止用户访问;归档用于永久退出管理。归档不会删除请求、用量、额度或计费账目,默认 Key 列表不再显示已归档项。 ## 模型权限 模型匹配不区分大小写,并忽略规则首尾空白。 - “允许全部模型”开启时,不再读取单独的模型规则。 - “允许全部模型”关闭时,至少需要一条模型规则。 - 手工输入的 Key 必须为 6-256 个不含空白或控制字符的字符;留空时自动生成。 - 不含 `*` 的规则执行精确匹配,例如 `gpt-5.6-sol`。 - `*` 可以匹配任意长度的文本,例如 `deepseek-*`、`*-flash` 或 `gpt-*-codex`。 - 空模型名不能通过模型准入。 请求模型不符合规则时,请求在到达上游前被拒绝,返回 HTTP 403 和错误码 `model_not_allowed`。 ## 上游路由 ### 自动路由 `auto` 模式不绑定具体账号,由 CLIProxyAPI 根据当前可用候选、优先级和自身调度规则选择上游。 切换到自动路由后,Key 原有的上游绑定会被清空。 ### 严格路由 `strict` 模式必须选择一个已经由 CLIProxyAPI 发现的上游账号。插件在调度阶段只选择该账号,不允许静默回退到其他账号。 出现以下情况时,请求返回 HTTP 503 和错误码 `bound_upstream_unavailable`: - 绑定的账号已经不存在; - 绑定账号不在本次 CPA 实时可用候选中; - 调度完成后的实际上游与绑定账号不一致。 上游账号信息来自 CLIProxyAPI 的账号列表和实际调度候选。持久化状态用于管理台展示,本次调度候选才是请求时的可用性依据,避免账号恢复后被旧状态继续拦截。插件只保存路由所需的账号标识、提供商、显示名称和状态,不读取或保存上游 Token、Cookie 等凭证内容。 ## 默认 Key 与新建 Key 首次启动且数据库中没有任何 Key 时,插件根据配置创建第一个 Key: - 默认名称:`default` - 默认 Key 值:`000000` - 默认状态:启用 - 默认路由:自动 - 默认模型权限:允许全部模型 该行为用于让已有 Codex/CLIProxyAPI 调用配置无需修改即可迁移到插件管理。 之后创建新 Key 时,系统按稳定 ID `key_default` 复制默认 Key 当时的模型权限和上游路由,再应用管理员本次明确填写的设置。管理员重命名默认 Key 不影响继承。复制只发生在创建时,后续修改默认 Key 不会影响已经创建的 Key。 如果数据库中已经存在 Key,启动配置不会覆盖或重新创建 `default`。 ## 请求处理流程 | 阶段 | 模块行为 | | --- | --- | | 1. 提取凭证 | 从 Bearer Token 或 `X-Api-Key` 读取 Key | | 2. 身份认证 | 查找 Key,并确认状态为 `active` | | 3. 建立调用身份 | 使用稳定 Key ID 作为下游调用者身份 | | 4. 模型准入 | 使用请求模型匹配该 Key 的模型规则 | | 5. 上游调度 | 自动委托 CPA,或选择严格绑定的账号 | | 6. 路由复核 | 严格模式下确认实际选择的账号与绑定一致 | 认证失败不会进入后续访问判断。Key 在请求过程中被停用时,后续拦截仍会再次检查状态,避免仅依赖认证阶段的旧状态。 额度、并发和价格检查发生在同一条请求准入链路中,但分别属于“额度与计费”和“价格配置”模块,不在本文展开。 ## 管理操作 管理员页面当前支持: - 查看有效 Key,按需包含已归档 Key; - 创建并复制 Key; - 修改名称、启用状态、模型规则和上游路由; - 临时禁用或重新启用 Key; - 永久归档 Key; - 同步并选择 CLIProxyAPI 当前可见的上游账号; - 根据历史请求和价格配置获得模型名称建议; - 查看该 Key 的累计、今日和最近使用记录。 管理操作通过受 CLIProxyAPI Management Key 保护的管理接口完成。匿名页面只能读取服务端脱敏后的真实数据,不返回完整 Key,也不能创建、修改、重置或归档。 ## 模块边界 本模块负责: - Key 身份与生命周期; - 下游请求认证; - 模型访问规则; - 上游账号选择策略。 本模块不负责: - 用户注册、密码、登录会话和角色权限; - 套餐、充值、支付和订单; - 额度扣减、周期重置和并发计数; - 模型价格维护与成本计算; - CLIProxyAPI 上游账号本身的登录、刷新或凭证维护。