适用症状:Slack 工具持续提示重新认证,错误原因为
oauth_refresh_token_rejected;重启应用、重开任务或普通 Reconnect 后仍然失败。本文来自一次 2026-07-29 的 macOS 实际排查。ChatGPT 的界面名称可能变化, 但判断方法和恢复原则不依赖具体菜单文案。
这通常不是某个聊天 session 自然过期,而是 ChatGPT / Codex 仍在使用一条失效的
Slack connection。每条 connection 在工具元数据中表现为一个不透明的 link_id;
真正的 OAuth token 不在本地工具缓存里。
有效修复不是反复重启 session,而是:
- 在 ChatGPT 网页端确认登录的是与 Codex 相同的 ChatGPT 账号;
- 打开 Plugins → Slack(界面名称若变化,就在 Plugin Directory 搜索 Slack);
- 真正删除或断开现有 Slack connection,再重新 Connect 并完成 OAuth;
- 用只读 Slack 调用验证;
- 如果能检查工具元数据,确认 Slack 的
link_id已换成新值。
先做一次不会写入 Slack 的只读探针,例如列出 workspace:
slack_list_workspaces
若结果包含:
oauth_refresh_token_rejected
记录以下脱敏信息:
- 失败时间;
- 错误 reason;
connector_id的短前缀;link_id的短前缀;- 最近一次成功调用使用的
link_id是否不同。
不要记录或分享 access token、refresh token、邮箱、workspace 私密内容或完整账号 ID。
若有 heartbeat、scheduled task 或轮询在调用 Slack,先暂停。重复调用同一坏连接只会 制造噪声,不会刷新 OAuth 状态。
打开 ChatGPT 网页端,确认当前账号与 Codex 使用的账号一致。账号切换后,旧任务、 当前 UI 和服务端 connected account 可能暂时处在不同上下文。
进入 Plugins → Slack。不要把下面这些操作当成等价修复:
- 只刷新页面;
- 只重启 Codex;
- 只新建聊天或任务;
- 只重新登录 Slack 网页;
- 只点击一个没有替换 connection 的 Reconnect。
在 Slack 插件管理页执行完整的 Disconnect / Delete,然后重新 Connect,并完成 Slack OAuth 授权。目标是让 ChatGPT 服务端建立一条新的 connected-account 记录,而不只是 继续复用旧记录。
这个操作会改变 ChatGPT 中的 Slack 连接状态,但不会删除 Slack 消息或退出 Slack workspace。
重新运行:
slack_list_workspaces
成功标准:
- 能返回预期 workspace;
- 不再出现
oauth_refresh_token_rejected; - 如果可检查连接元数据,
link_id已从旧值变成新值。
不要通过“发送一条测试消息”验证认证;读操作已经足够。
不需要先批量重启所有 session。让每个需要 Slack 的旧任务各运行一次只读探针:
- 成功:继续使用原任务;
- 仍失败:完整重启 ChatGPT / Codex 后再试一次;
- 仍命中同一坏
link_id:停止继续创建任务或重复 OAuth,进入升级路径; - 只有探针成功后,才恢复暂停的自动化。
Codex 可能把 App / Tool discovery 元数据缓存在本机。缓存中可以包含 link_id,但不
包含真正的 Slack refresh token。
一次真实案例中,即使把 discovery cache 可回滚地移走并完整重启,Codex 重新从
OpenAI 服务端获取工具列表后,仍然拿回同一个坏 link_id。这说明:
本地缓存清空
→ 服务端 tools/list 再次返回坏 link
→ 新缓存仍然包含坏 link
→ Slack 调用继续失败
因此不要把删缓存作为第一步,更不要无备份地删除整个 ~/.codex。清缓存最多是用于
区分“本地陈旧元数据”和“服务端仍下发坏 connection”的诊断步骤。
若完整 Delete / Disconnect → Connect 后,工具仍命中同一个坏 link_id:
- 停止要求用户反复登录、重启或新建 session;
- 保存脱敏时间线:最后成功时间、首次失败时间、错误 reason、旧/新
link_id前缀; - 注明是否已验证新任务、完整重启和真正删除后重连;
- 向 OpenAI Support 或
openai/codex提交 connected-account / connector-link mapping 故障报告。
这时更可能是服务端仍把当前 ChatGPT 账号映射到失效的 Slack connection,而不是本地 session 的问题。
只读 probe
├─ 成功 → 无需处理
└─ oauth_refresh_token_rejected
↓
暂停自动重试
↓
确认 ChatGPT 与 Codex 是同一账号
↓
Plugins → Slack → Delete/Disconnect → Connect
↓
再次只读 probe
├─ 成功且 link 已变化 → 逐个恢复旧任务与自动化
└─ 仍是同一坏 link → 停止本地折腾,整理证据并升级