OpenClaw 在 WSL 里做 openai-codex OAuth 登录时报 403,我最后这样修好了

OpenClaw 在 WSL 里接 openai-codex 报 OAuth 403,我最后这样修好了

最近花了点钱把 GPT Plus 开通,本来美滋滋想把 openai-codex / gpt-5.4 接进 OpenClaw,当成自己的“最强大脑”。结果第一步就卡住了:OAuth 登录死活过不去

更怪的是,同一台机器上,Windows 侧官方 Codex 是正常的,只有 WSL 里的 OpenClaw 报错。最后排下来,问题不在账号,也不在模型名,而是 Node/undici 这条请求链路没有按预期走代理。

现象

典型报错长这样:

◓  Complete sign-in in browser…...[openai-codex] code->token failed: 403 {"error":{"code":"unsupported_country_region_territory","message":"Country, region, or territory not supported","param":null,"type":"request_forbidden"}}
◇  OpenAI OAuth failed
Error: Token exchange failed
│
◇  OAuth help ─────────────────────────────────────────────────╮
│                                                              │
│  Trouble with OAuth? See https://docs.openclaw.ai/start/faq  │
│                                                              │
├──────────────────────────────────────────────────────────────╯
Error: Token exchange failed

这个报错特别容易把人带偏。第一眼看上去还觉得是学cc故意加强某区域限制似的。

但这里有个关键前提:Windows 侧官方 Codex 能正常用。这说明账号本身并不是完全不可用。

我先确认了什么

为了避免越查越偏,我先确认了两件事:

  1. 浏览器授权页能打开,不等于 CLI 后面的 token exchange 一定成功。
  2. OpenClaw 不会直接复用 Windows 侧的 ~/.codex/auth.json

查到这里,问题范围其实就已经收敛得很明显了:不是浏览器授权页本身的问题,而是 OAuth 换 token 这一步出了岔子。

真正的根因

最后踩实的点是:OpenClaw 在做 OAuth token exchange 时,走的是 Node/undici 的请求链路,而这条链路默认没有按预期使用环境代理。

于是就出现了一个很别扭的现象:

  • 浏览器授权看起来没问题
  • curl 看起来也没问题,WSL 本身也能用 Win 端代理
  • 但 CLI 换 token 还是 403

换句话说,浏览器、curl、CLI 这三者并没有真的走同一条网络路径

一句话概括: 浏览器能授权,不代表 Node 发起的 token exchange 也走了代理。

修复方法

关键命令其实就这一条:

NODE_USE_ENV_PROXY=1 openclaw models auth login --provider openai-codex

如果你本来就是带代理环境变量跑,建议写完整一点:

NODE_USE_ENV_PROXY=1 \
HTTP_PROXY=... \
HTTPS_PROXY=... \
ALL_PROXY=... \
openclaw models auth login --provider openai-codex

如果 OpenClaw 是挂在 systemd 用户服务里跑的,最好顺手把这个环境变量固化进去:

[Service]
Environment=NODE_USE_ENV_PROXY=1

为什么这一招有效

因为问题并不是“有没有代理”,而是 Node 这条链路有没有真的用上代理

NODE_USE_ENV_PROXY=1 的作用,就是让 Node/undici 去读取环境代理配置。这个开关打开之后,OAuth token exchange 才真正走到了你预期的网络出口。

当然,如果你本身走的是 tun 模式,也有可能直接成功,不一定会踩到这个坑。

结尾

这个问题说到底,不是账号坏了,也不是模型名写错了,而是 OpenClaw 在 WSL 里做 OAuth token exchange 时,Node/undici 没按预期走代理。

真正起作用的修复点,就是:

NODE_USE_ENV_PROXY=1

关键词: OpenClawWSLopenai-codexOAuth 403unsupported_country_region_territoryNODE_USE_ENV_PROXY

posted @ 2026-03-12 16:19  还是小白呐  阅读(235)  评论(2)    收藏  举报