- 增加新的鉴权方式(OAuth、SSO、控制台回调登录)
- 增加新的 token 来源(env / config / flag / 文件)
- 调整凭证解析优先级
- 改
bl auth login流程
flag 优先 ─→ config 文件 ─→ env var
│ │ │
└──── resolveCredential() (core) ───┐
│
▼
cli/utils/ensure-key.ts (启动时拦)
命令注入 Authorization 头
凭证类型(AuthMethod):
api-key— DashScope SK(sk-...),走 Bearer 头access-token— 控制台 OAuth 回调拿到的临时 token,走 Bearer + 不同 endpointak/sk— Alibaba Cloud 标准 AK/SK,走 ROA 签名(只用于知识库)
~/.bailian/config.json 可同时保存 api_key 与 access_token。登录任一种方式不得删除另一种(bl auth login --api-key / --console 只更新对应字段)。
解析分工:
resolveCredential()— DashScope API 命令(text chat、file upload等);config 里两者都有时 优先api_keyresolveConsoleGatewayCredential()— 控制台网关(app list、usage free、console call);只用 env/file 的access_token,忽略api_key
必改调用点: 凡 callConsoleGateway 必须用 resolveConsoleGatewayCredential,不能误用 resolveCredential(否则 config 仅有 api_key 时会拿 sk- 打网关)。
bl auth logout --console 只清 access_token;全量 bl auth logout 清两者。
-
packages/core/src/auth/types.ts:- 新增
AuthMethod字面量 - 新增
ResolvedCredential字段(如 token 类型 / 过期时间)
- 新增
-
packages/core/src/auth/resolver.ts:resolveCredential()增加新分支- 控制台网关命令用
resolveConsoleGatewayCredential()(与 DashScope 解析分离) - 优先级注释保持清晰(数字标号)
-
packages/core/src/auth/credentials.ts:- 如果新方式需要持久化,加
save*/load*/clear*
- 如果新方式需要持久化,加
-
packages/core/src/config/schema.ts:Config接口加新字段(如fileAccessToken、accessTokenEnv)ConfigFile接口加对应 disk 字段(snake_case)
-
packages/core/src/config/loader.ts:loadConfig()把 env / 文件读到 Config 上
-
packages/core/src/client/http.ts:- 不同
credential.method走不同分支(参考已有access-token分支走 console gateway) - Authorization 头注入正确
- 不同
-
packages/cli/src/utils/ensure-key.ts:- 启动时检查新凭证方式是否已配置,缺的话提示
- 如果是交互式 setup(类似
bl auth login --console),增加新分支
-
packages/cli/src/commands/auth/login.ts:- 新增
--xxxflag 触发新登录流程 - 持久化到 config(调用 core 的 save 函数)
- 新增
-
packages/cli/src/commands/auth/status.ts:- 分别显示
api_key/access_token是否已配置,以及 DashScope vs 控制台网关各自生效的 credential
- 分别显示
-
packages/cli/src/output/status-bar.ts:- 顶部状态条显示新凭证 method
-
packages/cli/src/main.ts:NO_AUTH_SETUP列表:- 如果新增的命令"自己管鉴权或不需要鉴权",加进去绕开 ensureApiKey 拦截
- 当前清单以
main.ts:NO_AUTH_SETUP为准
- core 的
BailianError鉴权失败 hint 保持通用(不写 cli 命令名,见 error-hint-change.md) - cli 的
enhanceHint(error-handler.ts) 按ExitCode.AUTH注入新方式的 cli 命令引导
-
README.md/README_CN.md"Authentication" 段落
-
packages/cli/tests/e2e/auth.e2e.test.ts增加新方式的 happy / failure 路径 - mask token 的输出格式不变(避免泄漏)
# 各种凭证组合
unset DASHSCOPE_API_KEY DASHSCOPE_ACCESS_TOKEN
HOME=/tmp/empty node packages/cli/src/main.ts auth status
# flag 注入
node packages/cli/src/main.ts auth status --api-key sk-xxx
# env 注入
DASHSCOPE_ACCESS_TOKEN=xxx node packages/cli/src/main.ts auth status- ✗ 加了新 token 来源但忘了改
resolveCredential优先级,实际不生效 - ✗
Config加字段但loadConfig没读 → 字段永远 undefined - ✗
bl auth login写成功但bl auth status不识别(两边走的 storage path 不一致) - ✗ token mask 显示完整 token,日志泄漏