﻿---
title: "登录缓存用 cli_auth_credentials_store，不要和 exec --ephemeral 抄混"
summary: "file 写 auth.json；keyring 走系统钥匙串；auto 失败才回文件；ephemeral 只在当前进程内存。这不是会话 rollout 开关。"
category: security
level: intermediate
surfaces: [cli, ide]
tags: ["cli_auth_credentials_store", "auth.json", "keyring"]
canonical: /tips/cli-auth-credentials-store/
---

# 登录缓存用 cli_auth_credentials_store，不要和 exec --ephemeral 抄混

file 写 auth.json；keyring 走系统钥匙串；auto 失败才回文件；ephemeral 只在当前进程内存。这不是会话 rollout 开关。

把登录缓存放哪，写在用户 config 顶层，任何 `[table]` 之前：

```toml
cli_auth_credentials_store = "keyring"
```

官方四种值：

- `file`：写 `CODEX_HOME/auth.json`（默认家目录是 `~/.codex`）。这是常见默认。
- `keyring`：只走操作系统凭据库，不可用就失败。
- `auto`：钥匙串可用就用，否则回退到 `auth.json`。
- `ephemeral`：只留在当前进程内存，不落盘。

这**不是** `codex exec --ephemeral`。后者管会话 rollout 写不写盘；登录态仍按上面的存储走。不要把两条都叫 ephemeral 就当成一件事。

CLI 和 IDE 扩展共用同一份登录缓存。一边 `codex logout`，另一边下次也要重新登录。ChatGPT 会话在使用中会自动刷新，所以活跃会话通常不必每天再走浏览器。

无头机拷 `auth.json` 只适用于 `file`，或 `auto` 已经回退到文件。`keyring` / `ephemeral` 没有这份可拷文件。要拷贝就先在有浏览器的机器上改成 `file` 再 `codex login`，或改用 `--device-auth` / 按次 `CODEX_API_KEY`。

管理员可用本机 `requirements.toml` 或 macOS MDM 强制这个键；一旦钉死，用户 `config.toml` 和 `-c` 都改不了。云端托管的 requirements 会忽略这项。`chatgpt_base_url` 同理。

部分 Learn 页还只写三种值，没写 `ephemeral`。以本机 `codex --help` 和 developers 配置参考为准。改完重新 `codex login`。

## 来源

- [OpenAI · Authentication](https://developers.openai.com/codex/auth)
- [OpenAI · Configuration reference](https://developers.openai.com/codex/config-reference)
