背景
买了一个 Codex 的"四段 RT"号,卖家提供的账号信息格式如下:
text
邮箱----密码----UUID----refresh_token
正常情况下,登录需要走 OAuth 流程,但遇到了一个尴尬的问题:邮箱收不到验证码,导致登录流程卡住。不过账号本身是正常的,能查到余额,说明没有被回收。
问题
Codex 的 ChatGPT 账号登录依赖浏览器 OAuth 流程,需要邮箱接收验证码。一旦邮箱收不到验证码,这条路就走不通。
那有没有办法绕过?
思路
Codex 的认证信息存储在本地文件 auth.json 中,具体位置如下:
-
Windows :
C:\Users\用户名\.codex\auth.json -
macOS/Linux :
~/.codex/auth.json
如果能够手动构造一个合法的 auth.json 放入对应目录,Codex 启动时会直接读取该文件,从而跳过浏览器登录流程。
操作步骤
1. 创建目录和文件
在用户目录下创建 .codex 文件夹,并在里面新建两个文件:auth.json 和 config.toml。
2. 配置 auth.json
json
{
"auth_mode": "chatgpt",
"tokens": {
"refresh_token": "rt_xxx"
},
"last_refresh": "2026-04-30T00:00:00Z"
}
其中 refresh_token 替换为卖家提供的那一串。
3. 配置 config.toml
toml
cli_auth_credentials_store = "file"
这一行的作用是告诉 Codex 从文件读取凭证,而不是走浏览器 OAuth 流程。
4. 设置代理并启动
由于 Codex 需要联网向 OpenAI 换取新的 token,因此需要开启代理:
bash
set https_proxy=http://127.0.0.1:7890
codex
启动后,Codex 会自动使用 refresh_token 换取新的 access_token,进入正常使用状态。
一个意外发现
配置完成后,我检查了 auth.json 中的 access_token 内容,发现里面包含的邮箱信息是我的,而不是卖家的。
原因分析 :我之前在本地登录过自己的账号,auth.json 中残留了我自己的 access_token 和 id_token。虽然我把 refresh_token 换成了卖家的,但 access_token 仍然是我的。
解码 JWT 的 Payload 部分(Base64 编码,非加密)可以看到:
json
{
"email": "xxx@qq.com",
"name": "xxx"
}
也就是说,这套配置实际上是:
-
access_token:我的身份信息(邮箱、对话记录)
-
refresh_token:卖家的额度(订阅类型、扣费权限)
Codex 使用 access_token 显示用户信息和读取对话记录,使用 refresh_token 去换取新的调用凭证来进行扣费。两者是分开管理的。
关于 JWT 的说明
JWT 的 Payload 部分只是 Base64 编码,并非加密。任何人拿到完整的 token 都可以解码读取里面的内容,包括邮箱、用户名、订阅信息等。
因此,auth.json 属于敏感文件,不要随意分享或提交到代码仓库。
总结
-
如果 Codex 邮箱验证码收不到,可以通过手动配置
auth.json绕过登录流程。 -
只需要卖家的
refresh_token即可完成配置。 -
access_token和refresh_token职责不同:前者管身份和对话记录,后者管额度和计费。 -
JWT 的 Payload 是明文编码,务必注意信息安全。