外观
密钥轮换与安全
最小暴露原则
- API Key 只进入可信客户端、本机环境变量或服务端 Secret
- 兑换码只在 DmCodex 账单页提交
- 官方核心首发未启用邀请奖励或提现;仅在明确启用 legacy 扩展后,才可在对应页面上传微信收款码
- 管理员 JWT 不应进入普通用户前端
DmCodex 的管理员跳转使用 60 秒有效、单次消费的 handoff code,避免把管理员 JWT 直接交给管理前端 URL。
需要立即轮换的情况
- 密钥被提交到 Git 或粘贴到公开聊天
- 下载的一键脚本被转发
- CC-Switch 导入链接被泄露
- 用量页面出现无法解释的请求
- 设备丢失或不再受控
提示词数据
不要提交生产密钥、私人个人数据、受监管数据、商业机密或无权发送给第三方模型服务的内容。上游模型的数据规则可能独立于 DmCodex。
自动化防护
设置请求超时、额度告警边界和最大重试次数。对 401/403 不重试,对 429 采用带抖动退避,对 5xx 做有限重试。
已连接应用
公开客户端使用 OAuth Device Authorization Grant 和 PKCE S256 请求访问。设备码和用户码只能消费一次,访问令牌短期有效,刷新令牌在每次使用后轮换;服务端仅保存这些值的哈希,不保存原文。
在“已连接应用”页面应先核对应用名称、受众、权限范围和到期时间,再批准或拒绝请求。授权后可以查看最近使用时间、到期时间并逐个撤销,也可以撤销当前账号下的全部有效应用授权。撤销应用授权不会轮换主 DmCodex API Key。
应用可以在设备授权请求中提供项目或租户提示;批准页面会显示并确认这些绑定。没有预设项目时,用户可以在批准时选择项目。签发后的令牌绑定该项目和租户,模型请求携带的 X-Project-ID 或 X-Tenant-ID 与绑定不一致时会被拒绝。
设备轮询和模型 API 均受服务端限流约束。收到 slow_down 或 HTTP 429 时,客户端必须遵守响应中的 Retry-After。model:read 只允许读取模型列表,model:invoke 才允许调用聊天补全;令牌还会校验受众、客户端、用户、到期和撤销状态。
模型凭据只能放在 Authorization 请求头,不得放入 query。公开入口对 /v1/models、/v1/chat/completions 和 /v1/responses 使用不记录访问日志或错误日志的精确路由,避免被拒绝的 query 凭据进入 Nginx 日志;POST JSON 在紧凑 UTF-8 重编码后还会再次执行 48 MiB 上限检查。
用户授权与服务凭据
Device Authorization Grant 用于用户批准安装在本地的公开客户端。公开客户端没有 client secret,必须使用 PKCE,并且不能把用户设备授权伪装成无人值守的服务身份。
真正的服务间调用应使用独立注册的机密客户端,并通过 Client Credentials 或 Token Exchange 建立服务主体、受限受众和独立审计。当前 DmCodex 元数据只声明 Device Authorization 与 refresh token;在服务端独立实现并声明机密客户端认证之前,不支持把“已连接应用”授权用于这些服务间流程。