Skip to content

Credentials

KS-OTO edited this page Sep 21, 2026 · 1 revision

凭据与多账号

这一页是配置里最容易踩坑的部分。配 Cookie 之前请先读完第一节。

Cookie 怎么填:只粘 ticket 的值,别粘整段

变量接受两种写法(裸 ticket 值,或整段 Cookie 头 a=b; c=d),但两者在不同环境下命运不同:

环境 整段 Cookie 头 原因
Vercel / EdgeOne Makers / Workers 面板 ❌ 会被拒绝 值里含 ; 空格,面板报「变量值不能包含空格、换行、制表符等特殊字符」
本地 .env / .dev.vars ✅ 可以,但需转义 加载器会展开 $,见下

推荐一律只粘 login_aliyunid_ticket 的值本身 —— 它不含空格与换行,所有平台都能原样保存, 服务端会自动按 login_aliyunid_ticket=<值> 处理(裸值缺少 name= 时自动补前缀)。

本地 .env:字面 $ 必须写成 \$,否则静默损坏

Bun 的 .env 加载器与 Vite 的 loadEnv()(vite.config.ts 用的就是它)都会做 $VAR 变量展开。 这类 ticket 的值里含 $,未转义时后两段会被当作变量名、静默展开为空 —— 实测 153 字符的 ticket 只剩 130 字符,丢了 23 个字符,且没有任何警告。

# ❌ 错误:$a1b2 与 $deadbeef 被当作变量展开为空
ALIYUN_TOKENPLAN_COOKIE=EXAMPLE_ticket_8ffe$a1b2$deadbeef*rest

# ✅ 正确:每个字面 $ 前加反斜杠
ALIYUN_TOKENPLAN_COOKIE=EXAMPLE_ticket_8ffe\$a1b2\$deadbeef*rest

上例是编造的占位值,只用来演示 $ 的位置。

损坏后的值发到网关只会返回 BailianGateway.Login.NotLogined —— 与「会话过期」的报错完全一致, 极易误判成 Cookie 失效。注意:加引号("…" / '…')在两种加载器下都无效,必须用 \$。

平台上(Vercel / EdgeOne / Workers 面板)直接粘原值,不要加反斜杠 —— 那里不做变量展开。

自检(在项目根目录执行,bun -e 会自动加载 .env):

bun -e 'console.log(process.env.ALIYUN_TOKENPLAN_COOKIE?.length ?? "not set")'

输出的长度应与你在浏览器里复制的值一致;明显变短就说明 $ 被展开吃掉了。

长度对了不代表值是对的:长度自检只能抓被 $ 吃掉的截断, 抓不到「长度相同但是旧值」。怀疑没生效时,比对哈希而不是长度。

整段 Cookie(模力方舟)在平台面板上:填 encodeURIComponent 后的值

百炼可以「只粘 ticket 的值」绕开空格限制,模力方舟不行 —— 代金券查询要的就是整段会话 Cookie (uuser_locale=zh-CN; abymg_id=…; BEC=… 这种),天生带 ; ,面板必定拒绝保存。

解法是存编码后的值:空格变 %20、分号变 %3B,没有空格与换行,面板照收; 服务端 normalizeSessionCookie()(server/gitee.ts)检测到值里含 % 且解码后出现 = 就自动还原, 业务代码拿到的始终是原始 Cookie 串,无需任何额外配置。

# 单引号保留空格;printf 不带尾部换行(echo 会写进 \n,同样是面板拒绝的字符)
COOKIE='uuser_locale=zh-CN; abymg_id=…; BEC=…'
printf '%s' "$(node -e 'process.stdout.write(encodeURIComponent(process.argv[1]))' "$COOKIE")" \
  | vercel env add GITEE_AI_SESSION_COOKIE production

只把空格换成 %20、分号保持原样也可以(启发式只看「含 % 且解码后有 =」); 本地 .env 两种写法都收,不要加 \$。

自检(还原后应看到带 ; 的整段,与浏览器里复制的一致):

bun -e 'console.log(decodeURIComponent(process.env.GITEE_AI_SESSION_COOKIE ?? ""))'

多账号支持

每个平台支持多组凭据:第 1 组使用基础变量名,第 N 组在变量名后加 _N 后缀 (连续编号,遇到缺失即停)。例如 DeepSeek 三个账号: DEEPSEEK_API_KEY、DEEPSEEK_API_KEY_2、DEEPSEEK_API_KEY_3。

成对凭据(AccessKey/SecretKey)同编号成组: VOLC_ACCESS_KEY_ID_2 + VOLC_SECRET_KEY_2。

每个账号独立查询、独立容错,仪表盘按账号卡片展示。

中间断号会让后续组全部读不到:有 _1、_3 却没有 _2,读取在缺口处停止。 空态里会给提示,但很容易被忽略。

账号别名(多 Key 团队建议配置)

Key 掩码(sk-EXAM****PLE9)对人而言没有可读性 —— 同一平台挂 5 个 Key 时无法判断哪个是哪个。 给每个 Key 配一个别名,卡片主标题就显示别名,Key 掩码退居次要位置(仅作消歧)。

变量名规则:在凭据变量名前缀后加 _LABEL,第 N 组同样加 _LABEL_N,按序号与凭据配对。

# 5 个 OpenCode Go 订阅,按团队标注归属
OPENCODE_GO_API_KEY=sk-aaaa...
OPENCODE_GO_LABEL=前端团队专用订阅
OPENCODE_GO_API_KEY_2=sk-bbbb...
OPENCODE_GO_LABEL_2=后端团队专用 Key
OPENCODE_GO_API_KEY_3=sk-cccc...
OPENCODE_GO_LABEL_3=算法组(长上下文)

各平台对应的别名前缀:

平台 凭据变量 别名变量
DeepSeek DEEPSEEK_API_KEY DEEPSEEK_LABEL
火山方舟 VOLC_ACCESS_KEY_ID VOLC_LABEL
智谱 GLM ZHIPU_API_KEY ZHIPU_LABEL
阿里云(资源包 / Token Plan 组织·座席) ALIYUN_ACCESS_KEY_ID ALIYUN_LABEL
阿里 Token Plan 个人版(仅 Cookie) ALIYUN_TOKENPLAN_COOKIE ALIYUN_TOKENPLAN_LABEL
模力方舟 GITEE_AI_API_KEY GITEE_LABEL
百度千帆 BAIDU_ACCESS_KEY_ID BAIDU_LABEL
OpenRouter OPENROUTER_API_KEY OPENROUTER_LABEL
Kimi For Coding / MiniMax KIMI_API_KEY 等 KIMI_LABEL 等
OpenCode Go OPENCODE_GO_API_KEY OPENCODE_GO_LABEL

三条容易踩的规则

  • 按序号配对,不按值配对。*_LABEL_2 对应的是第 2 组凭据; 中间断号(有 _1、_3 没 _2)会让后续组全部读不到。
  • 别用 ALIYUN_LABEL 标 Cookie 专属账号:没有 AK/SK 时 ALIYUN_LABEL 找不到配对项, 别名会被忽略 —— 这种情况请用 ALIYUN_TOKENPLAN_LABEL。
  • 同一序号两种凭据并存时(AK/SK + Cookie),别名取 ALIYUN_LABEL (两者本就是同一账号,只出一张卡)。

别名只影响展示,不参与任何鉴权或查询。


New API 令牌怎么取(NEWAPI_TOKEN)

变量叫 TOKEN 而不是 KEY,是因为这个框里要填的是系统访问令牌, 不是控制台里 sk- 开头的模型调用密钥。两者都能通过站点鉴权,但权限不同, 填错的表现是「填了却永远读不到数据」:

  • 系统访问令牌(推荐):登录你的 New API 站点 →「个人设置 → 安全设置 → 系统访问令牌」→ 生成, 把整串令牌粘进 NEWAPI_TOKEN。它能读管理接口,卡片字段最完整。 官方文档:https://docs.newapi.ai/zh/docs/api/management/auth
  • 模型调用密钥(sk-…,可用但不推荐):程序检测到管理接口 401 后会自动降级到 OpenAI 兼容的 账单接口(/v1/dashboard/billing/*),读数仍然正确,但拿不到用户名与按模型明细。

New API 的货币单位怎么读(不再写死 USD)

不同站点的 quota 计费口径不一样(美元额度 / 人民币额度 / 自定义代币), 所以读数不能一律按 $ 显示。程序会先读站点的公开接口 GET {baseUrl}/api/status (无需鉴权),拿到单位类型与换算参数后按站点官方口径折算 —— 换算规则照抄官方 setting/operation_setting/general_setting.go 与 logger.LogQuota:

quota_display_type 显示符号 换算
USD(站点默认) $ quota / quota_per_unit
CNY ¥ quota / quota_per_unit × usd_exchange_rate
CUSTOM custom_currency_symbol quota / quota_per_unit × custom_currency_exchange_rate
TOKENS 点 原始 quota(不折算)

换算因子 ≤ 0 时按 1 处理,符号为空时按 ¤ 处理。/api/status 拿不到 (站点关闭该接口或字段缺失)时按官方默认值 USD 兜底 —— 官方默认展示类型本身就是 USD。

想探测货币单位要看 /api/status;官方文档里的 GET /api/pricing 只有模型价格表, 不含币种信息。


阿里云百炼 Token Plan 的权限说明

  • 组织/座席视图(团队版)走 ModelStudio OpenAPI(ROA + AK/SK), 只需 AliyunTokenPlanReadOnlyAccess。

  • 个人版用量(5 小时/7 天窗口、订阅状态、加购包、重置卡)官方未提供 AK/SK 直调的公开接口: 实测 GET https://dashscope.aliyuncs.com/api/v1/tokenplan/*(Bearer API Key)系列当前 在网关返回空体 404(路由未注册,非鉴权失败)。项目提供两条等价通道,Cookie 优先:

    1. 控制台会话 Cookie(推荐,开箱可用) —— 与百炼控制台页面自身的请求完全一致:

      POST https://bailian-cs.console.aliyun.com/data/api.json?action=BroadScopeAspnGateway&product=sfm_bailian&api=…

      Cookie 鉴权。登录 https://bailian.console.aliyun.com 后,从 DevTools → Application → Cookies → bailian.console.aliyun.com, 复制 login_aliyunid_ticket 的值写入 ALIYUN_TOKENPLAN_COOKIE (实测仅此一个 Cookie 即可;其余 Cookie、Origin/Referer 均非必需)。 无需 AK/SK,无需任何 RAM 授权;会话过期(通常数周)后重新复制即可。 仅有该 Cookie 时也可独立使用 —— 此账号会显示「仅配置会话 Cookie」,组织/座席区块自动隐藏。 取值写法见上文「Cookie 怎么填」—— 填错会静默损坏且报错与「会话过期」同形。

    2. AK/SK 通道(官方 CLI bl usage token-plan 的等价实现,原生移植、无子进程): AK/SK 以 ACS3-HMAC-SHA256 调用 GenerateCLIAccessToken 换取控制台 access token, 再经控制台网关调用 zeldaHttp.apikeyMgr./tokenplan/personal/api/v2/*。 此路径需要 RAM 子用户额外授予以下自定义策略:

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "modelstudio:GenerateCLIAccessToken",
            "Resource": "*"
          }
        ]
      }

    未配置 Cookie 且未授权时,页面会在「个人版套餐用量」处给出黄色提示,组织/座席视图不受影响。

阿里云两块凭据是共存关系,不是二选一

ALIYUN_ACCESS_KEY_ID / ALIYUN_SECRET_KEY 与 ALIYUN_TOKENPLAN_COOKIE 各管一块数据,互不替代:

展示内容 依赖的凭据 缺失后果
阿里云百炼 Token 资源包实例(/api/usage 切片) ALIYUN_ACCESS_KEY_ID + ALIYUN_SECRET_KEY(BSS) 该切片返回 NOT_CONFIGURED,「资源包」区块不显示
Token Plan 组织 / 座席 / 共享包 同上(ModelStudio ROA) 组织/座席区块隐藏
Token Plan 个人版用量 ALIYUN_TOKENPLAN_COOKIE(或 AK/SK + 额外 RAM 授权,Cookie 优先) 「个人版套餐用量」处显示黄色提示

结论:

  • 加 Cookie 不会取代 AK/SK,两者负责不同数据;相同序号视为同一账号,只出一张卡片。
  • 不要把 AK/SK 删掉:删了就同时丢掉「Token 资源包」和「组织/座席」两块。
  • 只配 Cookie 也能用:个人版用量可独立查询,组织/座席区块自动隐藏。
  • 多账号按序号一一配对:ALIYUN_ACCESS_KEY_ID_2 与 ALIYUN_TOKENPLAN_COOKIE_2 指同一账号。

凭据纪律

本仓库是公开的,且历史上曾误提交过真实令牌(已用 git filter-repo 重写全部历史清除)。 因此:

  1. 绝不把真实 API Key、Cookie、Token 粘进任何入库文件;举例时用占位值。
  2. 测试夹具里的账号 id、命名空间、代金券码必须是编造的。
  3. 这里贴的东西按「所有人可见」对待。

细节见 CONTRIBUTING.md 与 安全模型。

Clone this wiki locally