Open
Conversation
问题: cc-switch 将所有 Claude API 凭证统一存为 ANTHROPIC_AUTH_TOKEN, 但 Claude Code 对两种认证方式使用不同的 HTTP header: - ANTHROPIC_AUTH_TOKEN → Authorization: Bearer(OAuth token) - ANTHROPIC_API_KEY → x-api-key(标准 API key) 当用户使用标准 API key(sk-ant-api...)时,被错误地存为 ANTHROPIC_AUTH_TOKEN,Claude Code 会将其作为 Bearer token 发送, 导致服务端返回 401。 修复: - 新增 claude_auth_env_keys() 根据 token 前缀自动选择 env var: sk-ant-oat... → ANTHROPIC_AUTH_TOKEN(OAuth) 其他 → ANTHROPIC_API_KEY(标准 API key) - 新增 get_claude_token_from_env() 统一读取逻辑,兼容两种 key - 更新所有写入端(TUI form / CLI interactive / deeplink import) - 更新所有读取端使用统一 helper,兼容已有数据 Closes SaladDay#32 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
问题 (Closes #32)
cc-switch 将所有 Claude API 凭证统一存为
ANTHROPIC_AUTH_TOKEN,但 Claude Code 对两种认证方式使用不同的 HTTP header:ANTHROPIC_AUTH_TOKENAuthorization: Bearer xxxsk-ant-oat...)ANTHROPIC_API_KEYx-api-key: xxxsk-ant-api...)当用户使用标准 API key 时,被错误地存为
ANTHROPIC_AUTH_TOKEN,Claude Code 将其作为 Bearer token 发送 → 服务端不认 → 401。验证过程
通过
strings分析 Claude Code 二进制,确认了两种 env var 的处理逻辑:修复方案
新增两个 helper(
services/provider/mod.rs)claude_auth_env_keys(token) → (primary_key, old_key)sk-ant-oat...→("ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY")("ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN")get_claude_token_from_env(env) → Option<&str>AUTH_TOKEN再查API_KEY,兼容新旧数据变更文件
写入端(3处) — 根据 token 前缀自动选择正确的 env var:
cli/tui/form.rs— TUI 表单提交cli/commands/provider_input.rs— CLI 交互模式deeplink/provider.rs— deeplink 导入读取端(5处) — 统一使用
get_claude_token_from_envhelper:cli/tui/form.rs— 编辑时加载已有 providercli/tui/ui.rs— TUI 详情展示cli/commands/provider.rs— CLI 展示cli/interactive/provider.rs— 交互模式展示services/provider/usage.rs— 用量检查deeplink/provider.rs— deeplink 读取向后兼容:已有数据库中存储的
ANTHROPIC_AUTH_TOKEN仍可正常读取,无需迁移。测试
全部 237 个测试通过,包括更新了 4 个受影响的断言。