登录与认证:ChatGPT 还是 API Key?
30 秒决策表
| 你的场景 | 推荐方式 | 原因 |
|---|---|---|
| 桌面 App / IDE 日常编码 | ChatGPT 登录 | 套餐额度、功能完整 |
| Codex Cloud、GitHub 环境 | ChatGPT 登录 | Cloud 硬性要求 |
| CI 流水线、定时任务 | API Key | 无需浏览器,适合非交互 |
| 企业需 RBAC / 数据驻留 | ChatGPT 登录(Enterprise) | 遵循工作区策略 |
| 远程 SSH、无浏览器服务器 | ChatGPT + 设备码,或复制 auth.json | 见下文「无头设备」 |
| 仅调用 OpenAI 模型代理 | API Key 或 requires_openai_auth | 见「其他模型提供方」 |
两种方式的策略差异:
| 维度 | ChatGPT 登录 | API Key |
|---|---|---|
| 计费 | 套餐内 Codex 额度 | OpenAI Platform 按量 |
| Cloud | 支持 | 不支持 |
| 企业管理 | RBAC、保留策略、驻留 | API 组织级策略 |
| CLI 默认 | 无有效会话时优先浏览器登录 ChatGPT | 可手动选择 |
各套餐功能差异见 OpenAI Codex 官方定价与功能说明页。
ChatGPT 登录(订阅访问)
适用于 App、CLI、IDE 扩展;Cloud 必须使用此方式。
标准浏览器流程
- 在 App / CLI / IDE 中选择 Sign in with ChatGPT。
- 浏览器完成 OAuth;CLI 通过 localhost 回调把 token 写回本地。
- 登录成功后,活跃会话会在过期前自动刷新,一般无需反复扫码。
已有 Access Token 时(自动化场景)
若环境已注入 ChatGPT access token,可从 stdin 传入:
printenv CODEX_ACCESS_TOKEN | codex login --with-access-tokenEnterprise 管理员可为受信任成员签发访问令牌,用于需要工作区权益但不适合开浏览器的本地自动化。创建与轮换见 OpenAI Enterprise 访问令牌文档。
API Key 登录(按量访问)
在 OpenAI 控制台创建 Key,在 App / CLI / IDE 中选择 API Key 登录即可。
- 费用走 OpenAI API 定价,不消耗 ChatGPT 套餐里的 Codex credits。
- 部分依赖 ChatGPT 工作区或 Cloud 的能力不可用或受限。
- CI/CD 推荐 API Key;不要把 Codex 运行在不可信或公开环境。
API Key 适合机器,ChatGPT 登录适合人;混用前先对照官方功能清单。
登录缓存与凭据存储
App、CLI、IDE 共享登录缓存。从任一端退出后,下次启动 CLI 或扩展都需要重新登录。
默认存储位置:
- 明文文件:
~/.codex/auth.json - 或操作系统凭据存储(keyring)
通过配置控制存储位置:
# file | keyring | auto
cli_auth_credentials_store = "keyring"| 值 | 行为 |
|---|---|
file | 存于 CODEX_HOME/auth.json(默认 ~/.codex) |
keyring | 存于 OS 凭据库 |
auto | 有 keyring 则用 keyring,否则回退 file |
ChatGPT 会话在 token 过期前会自动刷新,活跃使用通常不需要重复浏览器登录。
受管理环境:强制登录方式
管理员可通过托管配置限制认证:
forced_login_method = "chatgpt" # 或 "api"
forced_chatgpt_workspace_id = "00000000-0000-0000-0000-000000000000"当前凭据不符合策略时,Codex 会登出并退出。详见 OpenAI Codex 托管配置文档。
Codex Cloud 账户安全
Cloud 会直接操作代码库,账户安全要求高于普通 ChatGPT 聊天:
- 启用 MFA(多因素认证)。
- 使用 Google / Microsoft / Apple 社交登录时,也可在对应提供方开启 MFA。
- SSO 环境由管理员为全员强制 MFA。
- 邮箱密码登录必须在访问 Cloud 前为账户设置 MFA。
各登录提供方的 MFA 设置指引见 Google、Microsoft、Apple 官方帮助文档。
无头设备上登录
以下情况浏览器 OAuth 可能失败:
- SSH 远程、无图形界面
- 网络阻止 localhost 回调(默认
localhost:1455)
按优先级尝试:
首选:设备码认证(Beta)
- 在 ChatGPT 安全设置(个人)或工作区权限(管理员)中启用 device code login。
- 终端执行:
codex login --device-auth或在交互界面选择 Sign in with Device Code,在浏览器输入一次性代码。
备选 A:在本地登录后复制 auth.json
- 在有浏览器的机器上
codex login。 - 确认凭据在
~/.codex/auth.json(若用 keyring,需先改为file存储)。 - 复制到无头机器:
ssh user@remote 'mkdir -p ~/.codex'
scp ~/.codex/auth.json user@remote:~/.codex/auth.jsonDocker 容器:
CONTAINER_HOME=$(docker exec MY_CONTAINER printenv HOME)
docker exec MY_CONTAINER mkdir -p "$CONTAINER_HOME/.codex"
docker cp ~/.codex/auth.json MY_CONTAINER:"$CONTAINER_HOME/.codex/auth.json"CI 中长期维持 auth.json 的高级做法见 OpenAI Codex CI/CD 认证文档;默认仍推荐 API Key。
备选 B:SSH 转发 localhost 回调
ssh -L 1455:localhost:1455 user@remote
# 在该 SSH 会话中
codex login在本地浏览器完成 OAuth。
企业 TLS 与登录诊断
企业 TLS 代理或私有 CA:
export CODEX_CA_CERTIFICATE=/path/to/corporate-root-ca.pem
codex login未设置时回退 SSL_CERT_FILE。同一 CA 配置也作用于 HTTPS 与 WSS。
登录失败时查看 codex-login.log(位于配置的日志目录),由 codex login 单独写入,便于与支持团队排查。
其他模型提供方
在配置文件中定义自定义模型提供方时:
| 配置 | 含义 |
|---|---|
requires_openai_auth = true | 走 OpenAI 认证(ChatGPT 或 API Key),忽略 env_key |
env_key = "VAR_NAME" | 从环境变量读取该提供方 Key |
| 两者都不设 | 假定无需认证(如本地模型) |
完整配置说明见 OpenAI Codex 高级配置文档。
常见问题
Q:CLI 和 App 登录会互相覆盖吗?
共享缓存。一端 logout 会影响另一端。
Q:API Key 登录能用 Cloud 吗?
不能。Cloud 必须 ChatGPT 登录。
Q:设备码不可用怎么办?
回退标准浏览器登录,或使用 SSH 端口转发 / 复制 auth.json。
Q:凭据存在明文文件安全吗?
个人开发可用 keyring;共享机器或 CI 应用 API Key + 密钥管理,避免把 auth.json 提交进仓库。