cc-switch Codex 密钥迁移机制拆解【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switchcc-switch v3.20.1 引入一处 Codex 集成上的 Breaking Change第三方供应商切换从密钥写入 auth.jsonCodex 登录凭证文件改为配置即密钥——API 密钥注入config.tomlCodex 主配置文件的experimental_bearer_token字段auth.json回归纯官方 ChatGPT 登录文件。本文基于codex_config.rs的写入计划、安全门与预检代码拆解执行顺序、拒绝逻辑与升级影响。Codex 0.149 为何让旧版 auth.json 切换失效旧契约下cc-switch 把第三方 API 密钥写进auth.json的OPENAI_API_KEY依赖 Codex 的环境凭证继承自定义供应商表没有自带凭证时自动借用auth.json里的密钥。上游 Codex 0.149 取消了这一继承——自定义供应商不再读取auth.json于是旧默认模式切换后的请求一律 401。源码注释把新契约的边界写得很直白// Third-party switches are config-only. Since Codex 0.149 // (openai/codex#39214) custom providers no longer inherit ambient auth // from auth.json, so the API key travels as a provider-scoped // experimental_bearer_token in config.toml (honored since Codex 0.48). // auth.json is reserved for the official ChatGPT login: kept when the // preservation setting is on, deleted otherwise. It never carries // third-party keys,见 codex_config.rs。密钥落点从共享登录文件变为供应商自己的表内字段Codex 0.48 起识别该字段auth.json由此恢复单一职责只承载官方 ChatGPT 登录。这一改动同时消除了一个更隐蔽的风险——第三方密钥与官方 OAuth 令牌共处一文件跨供应商卡片可能互相借走不属于对方的凭证。配置即密钥第三方切换写入计划的执行顺序所有 Codex 实时配置写入供应商切换、代理接管备份重建、备份恢复都收敛到一个纯函数式入口 plan_codex_live_write全部变换——迁移、注入、盖章——都在构建写入计划CodexLiveWritePlan时完成写层只负责按计划落盘。第三方分支的执行顺序如下全表语义预检preflight_codex_provider_table_conflicts对每个供应商表含非活动表检查 0.149 在加载期拒绝的字段组合无法靠归一化修复的形状直接报错避免写出Codex 起不来的配置codex_config.rs官方分支提前返回官方卡片走write_full_auth路径密钥永不经过config.tomlcodex_config.rs提取携带密钥extract_codex_api_key从auth.OPENAI_API_KEY或配置文本已有的experimental_bearer_token取值两处皆空则卡片视为无密钥迁移废弃保留表把旧版接管投影遗留的[model_providers.openai]、.ollama、.lmstudio表重命名到 cc-switch 自有的cc-switchid常量见 codex_config.rs——必须在安全门之前做否则废弃表 openai_base_url的混合形状会被误判归一化旧式改址内置openai供应商 顶层openai_base_url的旧形状改写为cc-switch自定义表因为旧形状没有表可以承载密钥判定登录文件去留remove_auth_file !preserve_official_login即保留官方登录开关关闭时删除auth.json而非覆写两道安全门任一命中即以可操作错误拒绝本次切换下一节展开;注入令牌并盖章set_codex_experimental_bearer_token把密钥写入活动供应商表随后按登录保留状态对齐requires_openai_auth见 codex_config.rs。落盘阶段 write_codex_live_for_provider 先原子写config.toml配置提交成功后才删除auth.json删除失败只降级为警告不会把一次已经生效的切换回滚成未切换假象。顺序上先配置、后清理保证了崩溃窗口内不会出现登录没了、密钥也没落位的最坏组合。提交前预检与两道安全门的拒绝逻辑安全门保护同一个不变量第三方路由解析出的凭证永远不能来自auth.json。两个判定函数分别覆盖有密钥却没地方放和无密钥却会退回官方登录两种泄漏形状。门一携带密钥、但配置没有可承载令牌的供应商表自定义model_provider缺表或仅靠顶层openai_base_url改址match active_codex_model_provider_id(doc) { Some(id) if is_custom_codex_model_provider_id(id) doc .get(model_providers) .and_then(|item| item.as_table_like()) .and_then(|table| table.get(id)) .and_then(|item| item.as_table_like()) .is_none(), _ doc .get(openai_base_url) .and_then(|item| item.as_str()) .map(str::trim) .is_some_and(|url| !url.is_empty()), }见 codex_config.rs。0.149 下顶层令牌字段不被读取把密钥留在顶层等于把凭证交给一个无人消费的位置——官方 OAuth 登录会替代它发往第三方端点所以这类形状必须拒绝而不是尽力而为。门二无密钥、且活动表会以requires_openai_auth true回退官方登录fn codex_provider_table_falls_back_to_official_auth(table: dyn toml_edit::TableLike) - bool { table .get(requires_openai_auth) .and_then(|item| item.as_bool()) .unwrap_or(false) table.get(env_key).is_none() table.get(experimental_bearer_token).is_none() }见 codex_config.rs。整份配置的判定再区分三种路由codex_config.rs自定义表回退、内置openai被顶层openai_base_url改址、以及其余保留内置供应商ollama、lmstudio等永不回退 OAuth 登录。易错点在短路名单auth/aws子表被有意排除在自带凭证之外——0.149 校验它们与requires_openai_auth互斥把它们当作有凭证会让死配置蒙混过关codex_config.rs。拒绝必须发生在指针移动之前这是本次变更的第二个关键设计。preflight_codex_live_write复用与写层完全相同的计划构建只丢弃结果pub fn preflight_codex_live_write( category: Optionstr, auth: Value, config_text: Optionstr, ) - Result(), AppError { plan_codex_live_write( category, auth, config_text, crate::settings::preserve_codex_official_auth_on_switch(), ) .map(|_| ()) }见 codex_config.rs。其文档注释说明动机若在current指针移动后才被写层拒绝下一次切换会把旧实时配置回填进被拒卡片的数据库行污染卡片。切换主流程因此在移动指针前调用 preflight_codex_live_write_for_state预检与实写共用同一套归一化、安全门与令牌注入逻辑二者不会漂移。requires_openai_auth 盖章与登录保留开关的新契约保留官方登录login preservation开关在新契约下只剩一个语义开 第三方切换完全不动 ChatGPT 登录关 删除auth.json。为了让 Codex 的登录界面与磁盘真实状态一致每次直连切换都会对活动供应商表盖章if provider_table .get(requires_openai_auth) .and_then(|item| item.as_bool()) Some(preserve_official_login) { return Ok(config_text.to_string()); } provider_table.insert( requires_openai_auth, toml_edit::value(preserve_official_login), ); Ok(doc.to_string()) }见 align_codex_requires_openai_auth_with_login_preservation。盖章只触碰自带令牌短路experimental_bearer_token或env_key的表——给无短路的表盖上true请求凭证会被路由到保留的官方 OAuth 登录恰好是安全门要阻止的泄漏而保留预设自带的旧值0.149 之前auth.json承载第三方密钥时代的遗留不可信一律以磁盘写后状态为准覆盖。与之配套的是数据库回填时的令牌回收从实时配置读回时若config.toml携带注入令牌会把它提回auth.OPENAI_API_KEY并清出配置文本codex_config.rs保证存储的供应商卡片不泄露生成物、始终保持规范形状。这也解释了编辑对话框行为的变化表单不再从共享的auth.json预填密钥而是重建自卡片自己的表内 bearer避免同 base URL 的卡片密钥互相收敛修复 #6534。旧配置形态自动修复、用户影响与参数速查升级后的第一次切换/接管会按固定顺序执行一组无副作用的修复废弃保留表重命名幂等、无name自定义表补名0.149 对任何无名单元表整份拒绝加载、旧式openai_base_url改址迁移为cc-switch表codex_config.rs、以及加载期字段冲突预检。这些修复全部幂等已归一化的文本原样通过。切换涉及的关键字段速查键名类型默认值/取值说明experimental_bearer_tokenstring按需注入第三方密钥在config.toml的落点优先写入活动供应商表保留 id 路由下落顶层0.149 不读且会被安全门拒绝requires_openai_authbool每次切换盖章与磁盘上的登录保留状态对齐只驱动 0.149 的登录界面不改变已短路表的请求凭证model_providerstringopenai缺省时活动路由选择器缺失的第三方卡片按内置openai处理改址走openai_base_url再迁移为自定义表auth.jsonOPENAI_API_KEY/登录材料文件仅官方登录第三方切换不再写入保留开关关闭时整个文件被删除失败删除只出警告保留官方登录开关bool设置关关 第三方切换删除auth.json开 登录跨切换保留且代理注入 OAuth 卡片的requires_openai_auth恒为false用户侧影响面来自 v3.20.1 升级说明Codex 0.48 之前的版本读取不到experimental_bearer_token第三方认证直接失效需升级 Codex保留开关关闭默认时第三方切换改为删除而非覆写auth.json要恢复 ChatGPT 登录切回绑定 Auth Center 账号的官方卡片或codex login此前碰巧能用的两类卡片现在会被切换期拒绝空配置卡片无表承载密钥、无密钥且依赖requires_openai_auth true或裸openai_base_url改址借用官方登录的卡片——需补[model_providers.id]条目或 API 密钥0.149 兼容修复只在下一次实时写入时生效旧形状不会单独触发重写修复 #6534 之前已互相污染的密钥不会自动纠正需在每张卡片上重输一次。回归测试如何锁住密钥落位契约测试围绕三个不变量布防拒绝形状不可写codex_config.rs 断言携带密钥但无可承载表形状的preflight_codex_live_write返回错误第三方与官方上下文均拒而归一化后的形状通过——锁死门一先于指针移动生效OAuth 卡片不被门误杀live.rs 针对 xAI Grok OAuth 这类设计上无密钥的代理注入卡片断言中和requires_openai_auth快照后预检必须放行即 v3.20.1 中切换被安全门误拒的回归防护保留表迁移无损且大小写精确codex_config.rs 验证旧接管投影的保留表被重命名、活动路由保持可达、保留登录时凭证不泄漏codex_config.rs 进一步锁定上游大小写语义——OpenAI这类变体是合法自定义 id而oss/ollama-chat在 0.148/0.149 上并非保留 id迁移器不得误伤。延伸阅读codex_config.rs写入计划、两道安全门、令牌注入与保留表迁移的完整实现入口live.rs切换指针移动前的预检调用与代理注入 OAuth 卡片的标志中和mod.rs供应商切换主流程预检与current提交的事务顺序codexProviderPresets.ts预设侧修复源代理注入 OAuth 预设的requires_openai_auth false在此产出CHANGELOG.mdv3.20.1 的变更说明、升级注意事项与受拒卡片的处置指引。【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
OpenHands 实战:TaoToken 当默认供应商跑一个 SWE-bench 任务要烧多少 Token /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/20 23:05:00
CC Switch 切到 TaoToken:Claude Code 30 秒换 API 供应商 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/20 23:05:00
Tornado 3.2.0 版本全解析:asyncio 桥接、C 扩展加速与 Web 框架核心增强 后端Web框架异步编程WebSocket 【免费下载链接】tornado Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. 项目地址: https://gitcode.com/gh_mirrors/to/tornado 点击查看 免费下载 本文基于仓库内… · 2026/9/20 23:05:00
phpmysql购物网站开发2026最新 PHP MySQL购物网站开发图解步骤避坑指南 改个需求建站公司拖一周,这种憋屈事儿谁还没遇到过?很多中小企业主找外包做 PHP MySQL 购物网站,合同签了,代码交付了,结果想改个按钮颜色、加个优惠券逻辑,对方要么报价翻番,要么排期排到下个月。这根本不是因为技术难,而是你不懂这套技术栈的底层逻辑… · 2026/9/21 6:44:17
seo是什么岗位的缩写?5步拆解求职与建站成本对比评测 seo是什么岗位的缩写?5步拆解求职与建站成本对比评测 别被那些花里胡哨的模板站忽悠了,看着挺像回事,其实打开速度慢得让人想砸键盘,更别提搜索排名了。很多老板花了几千块买个模板,结果百度搜自家品牌名都排不到首页,这就是典型的“为了省小钱,丢了大生意”。 今天咱们不整虚的,直接聊聊… · 2026/9/21 6:31:13
群辉做网站服务器配置对比评测:3个维度避开高价坑 群辉做网站服务器配置对比评测:3个维度避开高价坑 找建站公司最怕被坑高价,尤其是听到“高配服务器”就懵圈。很多老板在选群辉做网站服务器配置时,往往被销售话术绕晕,最后花了云服务器顶配的钱,结果网站还是打不开。… · 2026/9/21 6:18:01
i网站建设踩坑实录:被黑后选哪家更靠谱 i网站建设踩坑实录:被黑后选哪家更靠谱 上周凌晨三点,我的手机疯狂震动。客户在群里@我,说官网突然弹出一堆博彩广告,百度一搜全是挂马链接。那一刻,冷汗直接下来了。… · 2026/9/21 6:04:19
php做网站页面在哪做一文搞懂避坑指南 php做网站页面在哪做一文搞懂避坑指南 找建站公司报价三万八,回来一看还是套模板?很多甲方朋友在这一步就栽了跟头,怕被坑高价,又怕自己不懂技术被忽悠。别慌,今天咱们不聊虚的,直接拆解 php做网站页面在哪做 的底层逻辑, 一文搞懂… · 2026/9/21 5:48:20
Simulink与FlightGear联合仿真:飞行器控制算法三维可视化验证平台搭建 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 5:38:40
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化 直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39
Word表格编号全攻略:从列表编号到题注交叉引用 写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39
从第一个站到第二个站:独立开发者的静态网站选型与落地实践 1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18