登录与认证: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 必须使用此方式。

标准浏览器流程

  1. 在 App / CLI / IDE 中选择 Sign in with ChatGPT。
  2. 浏览器完成 OAuth;CLI 通过 localhost 回调把 token 写回本地。
  3. 登录成功后,活跃会话会在过期前自动刷新,一般无需反复扫码。

已有 Access Token 时(自动化场景)

若环境已注入 ChatGPT access token,可从 stdin 传入:

printenv CODEX_ACCESS_TOKEN | codex login --with-access-token

Enterprise 管理员可为受信任成员签发访问令牌,用于需要工作区权益但不适合开浏览器的本地自动化。创建与轮换见 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 聊天:

  1. 启用 MFA(多因素认证)。
  2. 使用 Google / Microsoft / Apple 社交登录时,也可在对应提供方开启 MFA。
  3. SSO 环境由管理员为全员强制 MFA。
  4. 邮箱密码登录必须在访问 Cloud 前为账户设置 MFA。

各登录提供方的 MFA 设置指引见 Google、Microsoft、Apple 官方帮助文档。

无头设备上登录

以下情况浏览器 OAuth 可能失败:

  • SSH 远程、无图形界面
  • 网络阻止 localhost 回调(默认 localhost:1455

按优先级尝试:

首选:设备码认证(Beta)

  1. 在 ChatGPT 安全设置(个人)或工作区权限(管理员)中启用 device code login。
  2. 终端执行:
codex login --device-auth

或在交互界面选择 Sign in with Device Code,在浏览器输入一次性代码。

备选 A:在本地登录后复制 auth.json

  1. 在有浏览器的机器上 codex login
  2. 确认凭据在 ~/.codex/auth.json(若用 keyring,需先改为 file 存储)。
  3. 复制到无头机器:
ssh user@remote 'mkdir -p ~/.codex'
scp ~/.codex/auth.json user@remote:~/.codex/auth.json

Docker 容器:

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 提交进仓库。