﻿---
title: "CI 有 OIDC 就用 WIF，不要落盘长期令牌"
summary: "0.148+ 实验/企业能力。OPENAI_FEDERATION_RULE_ID 和 OPENAI_IDENTITY_TOKEN_FILE 必须成对出现。login/logout 会被拒。"
category: security
level: advanced
surfaces: [ci, cli]
tags: ["WIF", "OIDC", "企业"]
canonical: /tips/workload-identity-env/
---

# CI 有 OIDC 就用 WIF，不要落盘长期令牌

0.148+ 实验/企业能力。OPENAI_FEDERATION_RULE_ID 和 OPENAI_IDENTITY_TOKEN_FILE 必须成对出现。login/logout 会被拒。

工作区要开通 workload identity。管理员在 Admin Portal 连好规则后，进程里只放这两项：

```bash
export OPENAI_FEDERATION_RULE_ID="idpm_..."
export OPENAI_IDENTITY_TOKEN_FILE="/var/run/secrets/openai.com/identity-token"
codex login status   # 应打印 Logged in using workload identity
codex exec "Reply with only: workload identity is working"
```

规则 ID 不是密钥。令牌文件才是。用绝对路径、目录 `0700`，放在仓库和可写根之外。托管 Linux 再挡模型读令牌：

```toml
[permissions.filesystem]
deny_read = ["/var/run/secrets/openai.com"]
```

刷新令牌由宿主机进程原子改名写入，不要让 Codex 自己去打 metadata 服务。WIF 变量出现任一把，就不会回退到 API key 或 `auth.json`；只设一把会报错。交换得到的 OpenAI 令牌只留在内存，不写 `auth.json`。

`codex mcp-server` 不支持 WIF。原生 Windows 用 elevated 沙箱，否则模型可能读到令牌文件。`codex login` / `logout` 在这套环境下会被拒绝。

## 来源

- [OpenAI · Workload identity federation](https://learn.chatgpt.com/docs/enterprise/workload-identity)
