凭据来源不唯一会让客户端反复刷新
判据:字段声明的和文件里有的对不上
以 Codex 的 ~/.codex/auth.json 为例:
auth_mode: "chatgpt"→ 声明走 OAuth,靠tokens.refresh_token定期刷新;- 同一文件里却出现
OPENAI_API_KEY: "sk-..."→ 另一套 key 认证。
auth_mode 只声明了一套,文件里实际躺着两套。谁都不确定该用哪个,刷新就会来回打架。
定位动作(按顺序)
- 看
auth_mode声明的是哪一套认证。 - 列出文件里实际存在的凭据字段(
tokens.*vs*_API_KEY),确认是不是只有一套。 - 看
config.toml期望哪一套:model_provider+base_url+requires_openai_auth决定客户端打算用登录态还是 key。配置期望 key、auth 里却是登录态(或反之)= 冲突。 - 有历史副本时比对
last_refresh与 token 的exp:旧副本的 token 已过期却仍被读,是反复刷新的直接线索。
处理:让来源唯一
- 二选一,不要并存:要么纯登录态(登出后重新登录,清掉被注入的 key),要么纯 key(换成 key 认证的 provider)。
- key 若曾写进会被外发的文件(聊天/网盘/同步目录),按泄漏处理并轮换。
- 第三方配置切换工具(如 cc-switch)往 auth 里写过 key 后,即使工具已卸载,残留也不会自动清除。
相关
- 凭据正确却被拒先查登录校验哪个字段 —— 同族:先确认客户端在校验哪个字段
- 同名provider冲突会让模型路由漂移 —— 配置层的同名冲突;本条是凭据层的来源冲突
- 多源更新按维度取真源 —— 同一条原则:一个维度只能有一个真源
- 验不到的部分要显式记为未验证 —— 本条根因来自一次实际比对,修复效果未在该会话中复验