Codex 只认一个账号时,浏览器登录态怎么组织

多个 ChatGPT 账号同时存在时,真正麻烦的是登录态放在哪里。

ChatGPT Web 已经有账号切换器,可以在同一个浏览器会话里保留两个账号;但 ChatGPT 桌面 App 里的 Codex Tab 仍然只有一个当前账号。额度用完后想切到另一个账号,就要退出 App 当前账号,再走一次「Sign in with ChatGPT」的浏览器认证流程。

如果只是每周低频切一两次账号,目标应该很克制:让浏览器提前保留各个账号的登录态,切换时少输密码、少碰验证码,同时不复制 token、不替换 auth.json,也不把登录凭据交给不必要的第三方扩展。

先拆清楚三个登录态

OpenAI 帮助中心把 ChatGPT Web 的账号切换边界写得很明确:账号切换器目前可用于 ChatGPT Web,不支持 Codex desktop 和原生 ChatGPT 手机 App;同一个 Web session 里最多可以保留两个账号。

Codex 的登录机制是另一条链路。Codex Authentication 说明,从 ChatGPT 桌面 App、Codex CLI 或 IDE extension 使用 ChatGPT 登录时,会打开浏览器完成登录,登录后浏览器把凭据返回 Codex。Codex 之后会缓存登录信息,并在使用中刷新 token,正常情况下不需要每次重新走浏览器登录。

这就形成了三层状态:

位置 能保存什么 关键限制
ChatGPT Web 同一浏览器 session 里最多两个 ChatGPT 账号 只覆盖 Web,不等于 Codex Tab 同时登录多个账号
Codex Tab 当前 App 使用的一个 ChatGPT 账号 切账号要退出当前账号,再走浏览器认证
浏览器数据目录 chatgpt.com 的 Cookie、local storage、已登录状态 每个数据目录天然是一套独立浏览器环境

浏览器里已经登录目标账号时,Codex 触发的认证流程通常会短很多。但这不代表一定不会验证。OpenAI 登录验证说明提到,新设备、异常位置、敏感操作或安全检查都可能触发额外验证;MFA 文档也说明,开启 MFA 后,登录时可能被要求使用已启用的验证方式。

所以判断口径应该是:浏览器登录态能减少重复登录,不能绕过 OpenAI 的安全验证。验证码是否出现,由账号、设备、位置、MFA 和安全策略共同决定,不是 Codex Tab 每次强制要求。

Edge Profile 为什么用起来重

Microsoft Edge 自带多个 Profile。它可以解决多账号登录态隔离问题,但对这个场景有点重。

Microsoft Edge 的 Profile 文档说明,不同 Profile 会分开浏览器设置、书签、扩展、主题和偏好。这个设计适合长期区分工作和个人浏览环境;如果目的只是「给 Codex 认证时提供一个 ChatGPT 登录态」,切 Profile 会把整套浏览体验一起切走。

Edge Profile 也可以不登录 Microsoft 账号,只做本地隔离。但日常使用时仍然要在头像菜单、窗口和默认外部链接 Profile 之间来回确认。切一次账号只为完成一个 OAuth 登录,这个操作成本会显得很别扭。

更贴近需求的做法,是不用 Edge 的 Profile UI,而是直接给 Edge 指定几个专用数据目录。

--user-data-dir 做专用认证窗口

Chromium 支持用 --user-data-dir 指定浏览器数据目录。Chromium 的 Profiles 文档把这个模式描述成:创建一个目录保存新 profile 数据,再用带 --user-data-dir 的快捷方式启动浏览器;如果目录为空,浏览器会自动初始化数据。Microsoft Edge 的 UserDataDir 策略文档也说明,未配置策略时,用户可以通过 --user-data-dir 覆盖默认 profile path。

这和 Edge 右上角的 Profile UI 不是一回事。它更像给同一个 Edge 程序准备几个独立小房间:

%LOCALAPPDATA%\OpenAIAuth\A
%LOCALAPPDATA%\OpenAIAuth\B
%LOCALAPPDATA%\OpenAIAuth\C

每个目录都会保存自己的 Cookie、历史、扩展、书签和站点存储。因为这些窗口只服务 ChatGPT 认证,书签和扩展空着也没关系。

Windows PowerShell 里可以这样启动第一个专用窗口:

$authRoot = Join-Path $env:LOCALAPPDATA 'OpenAIAuth\A'
msedge "--user-data-dir=$authRoot" --no-first-run --new-window https://chatgpt.com

第二个和第三个账号只改目录名:

$authRoot = Join-Path $env:LOCALAPPDATA 'OpenAIAuth\B'
msedge "--user-data-dir=$authRoot" --no-first-run --new-window https://chatgpt.com
$authRoot = Join-Path $env:LOCALAPPDATA 'OpenAIAuth\C'
msedge "--user-data-dir=$authRoot" --no-first-run --new-window https://chatgpt.com

第一次打开时,分别登录 ChatGPT 账号 A、B、C。后面这些目录会保留自己的登录态。也可以把命令做成三个桌面快捷方式,例如「OpenAI Auth A」「OpenAI Auth B」「OpenAI Auth C」,平时只在需要切 Codex 账号时打开。

如果 msedge 命令不可用,快捷方式的目标可以写成完整路径:

"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --user-data-dir="%LOCALAPPDATA%\OpenAIAuth\A" --no-first-run --new-window https://chatgpt.com

低频切换时怎么操作

日常 Edge 继续按原来的方式使用,专用认证窗口只保存 ChatGPT 登录态。

切换 Codex 账号时按这个顺序来:

  1. 在 ChatGPT 桌面 App 的 Codex Tab 里退出当前账号。
  2. 点击 Sign in with ChatGPT
  3. App 会用默认浏览器打开认证 URL。
  4. 立刻复制当前打开的认证 URL。
  5. 打开对应账号的专用认证窗口,例如 OpenAI Auth B
  6. 把认证 URL 粘进去,在这个窗口里完成登录确认。
  7. 浏览器回跳后,Codex Tab 会拿到对应账号的凭据。

这个流程的关键,是认证仍然发生在同一台机器、同一个 OpenAI 官方登录流程里。复制的是一次性的认证 URL,不是长期 token;浏览器最后回跳给 Codex,Codex 自己缓存当前账号。

认证 URL 仍然要当敏感信息处理。它通常带有一次性状态参数,应该只在自己机器上的浏览器之间复制,不要发到聊天、工单、笔记或截图里。

也不要手动复制或轮换 Codex 的 auth.jsonCodex Authentication 说明,Codex 可能把凭据缓存在 ~/.codex/auth.json 或系统凭据库里,并明确提醒 auth.json 含有 access tokens,要像密码一样保护。为了每周切一两次账号去保存和替换这些文件,风险和收益不成比例。

第三方多会话扩展不是首选

能解决「同一个网站多个登录态」的第三方工具确实存在,比如 SessionBoxSessionHub 和一些 Cookie Profile 类扩展。它们的共同目标,是让同一个浏览器里出现多份隔离 session。

这类工具适合测试普通 Web 系统的多账号场景,但不太适合承载 ChatGPT / Codex 登录态。

原因很简单:多会话扩展要管理登录态,就会接触 Cookie、站点存储或隔离容器。Chrome Extensions cookies API 允许具备权限的扩展读取、设置、删除指定站点的 Cookie,也能枚举 cookie stores。这个能力很强,意味着扩展的可信边界会直接进入账号安全边界。

对普通测试账号来说,这可能只是工具便利性问题;对 ChatGPT 和 Codex 来说,Cookie、OAuth 状态和本地凭据都和真实账号、账单、聊天记录、工作区权限、代码仓库访问相关。除非非常信任扩展来源、权限范围和数据处理方式,否则不应该把它放在首选方案里。

更稳的顺序是:

  • 先用浏览器自己的数据目录隔离登录态。
  • 再考虑独立浏览器,例如 Chrome、Firefox 或 Edge Beta / Dev。
  • 最后才考虑多会话扩展,并且只给最小权限。

要不要装 Chrome 或 Firefox

装 Chrome 可以把登录态从日常 Edge 里分出去,但它解决的是「多一个浏览器容器」,不是「一个浏览器账号里有多个 ChatGPT 登录态」。如果只有两个账号,Edge 一个、Chrome 一个,确实很简单;如果有三个账号,Chrome 里仍然会回到 Profile 或 --user-data-dir 的问题。

Firefox 的 Multi-Account Containers 更接近「同一个浏览器 Profile 里多个登录态」。它会按容器隔离 Cookie,Web 日常多账号体验很好。问题在 Codex 登录流程上:外部 App 打开的 OAuth URL 未必能自动进入指定容器,所以最后仍然可能需要手动复制 URL。

Edge Beta、Dev、Canary 也可以和 Stable 并排安装。它们天然有独立数据目录,图标和任务栏也更容易区分。但为了三份 ChatGPT 登录态去装三个浏览器版本,维护成本未必比 --user-data-dir 更低。

低频切换时,专用数据目录已经够用。它不依赖扩展,不改变日常浏览器 Profile,也不需要装新浏览器。

安全边界要写在流程里

这里还有一条容易被忽略的边界:账号额度不足和登录态隔离是两件事。

如果只是本人持有多个付费账号,低频手动切换,浏览器登录态隔离可以减少重复登录成本。它应该保持手动、可见、低频,并且尊重 OpenAI 登录验证。只要系统要求 MFA,就正常完成验证。

如果把这个流程做成自动轮换账号、自动复制凭据、自动替换 token 或规避系统限制,就进入了完全不同的风险区间。OpenAI Terms of Use明确禁止绕过 rate limits、restrictions、protective measures 或 safety mitigations。工具设计上应该避开这条线。

所以这套方案只做三件事:

  • 浏览器提前保存本人账号的登录态。
  • Codex 切账号时手动选择用哪份登录态完成官方认证。
  • 敏感凭据继续由 Codex 和浏览器自己管理。

它不做自动登录,不保存验证码,不读取 Cookie,不复制 auth.json,也不把认证状态交给第三方扩展。

总结

  • ChatGPT Web 的账号切换器只解决 Web 侧问题,不代表 Codex Tab 可以同时登录多个账号。
  • Codex 登录会走浏览器认证;浏览器已有登录态时,流程通常更短,但额外验证仍可能出现。
  • Edge Profile 能隔离登录态,但会一起隔离书签、扩展和整套浏览器体验;如果只为 Codex 认证,它有点重。
  • --user-data-dir 可以把同一个 Edge 程序拆成几个专用认证窗口,每个窗口只保存一个 ChatGPT 账号的登录态。
  • 第三方多会话扩展能做类似事情,但它们会进入 Cookie / session 安全边界,处理 ChatGPT 和 Codex 账号时不适合作为首选。
  • 一周切一两次账号时,手动复制认证 URL 到专用认证窗口,是一个足够省事、也足够克制的折中。