1. WSL 里 codex 登录跳转 403 到底卡在哪如果你在 Windows 的 VS Code 里装 codex 插件点登录能正常跳浏览器、授权完就回来了但一切换到 WSL 里的 Ubuntu同样的操作却弹出 403那这篇就是写给你的。核心检索词先摆出来WSL、codex、403 错误、镜像网络、.wslconfig。简单说codex 登录走的是「本地起一个回调服务 浏览器跳转 localhost 回调」的流程而 WSL2 默认用的是 NAT 网络模式Windows 和 WSL 分属两个网络命名空间浏览器在 Windows 侧、回调服务在 WSL 侧localhost 对不上授权服务器校验来源时就容易返回 403。这个问题不是 codex 独有的任何依赖 localhost 回调的 CLI 登录各种 OAuth 式登录在 WSL2 NAT 模式下都可能翻车。适合谁看日常在 WSL 里写代码、用 codex 或类似 CLI 工具、又不想每次切回 Windows 终端的人。我试过最省事的修法不是去改 hosts 或手动转发端口而是直接把 WSL 切成镜像网络mirrored让 WSL 和 Windows 共享同一套网络接口localhost 回调自然就通了。下面从 .wslconfig 配置切入再结合 TaoToken 的统一 Key/API 通道把登录和调用一次跑通。2. 前置准备TaoToken 统一 Key 与 API 通道在动手改网络之前先把「调用侧」的凭证准备好这样网络一通就能立刻验证不用来回切窗口。TaoToken 在这里的角色是统一 Key/API 通道你拿一个 Key就能通过兼容接口去调不同模型codex 这类工具只要支持自定义 base_url 和 api_key就能接进来。对 WSL 场景来说好处是配置集中在一处不用在 Windows 和 WSL 里各维护一套。你需要做两件事一是拿到 API Key二是记住接入文档的位置后面 config.toml 里要填。Key 在控制台的 API Keys 页面生成接入方式看文档页两个入口分别是生成 Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite注意Key 只显示一次生成后立刻复制到安全的地方。不要把它提交进 git也不要在截图里露出完整串。API 的基础地址是 https://taotoken.net/api这个地址不加 UTM 参数直接用于程序请求。如果你只是想先验证模型通不通可以先用模型对话页面发一条消息试试模型对话https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite这一步的目的是确认「Key 有效 通道可用」把变量分开。如果模型对话都报错那问题在 Key 或额度不在 WSL 网络先解决前者再往下走。3. 可复制配置.wslconfig 镜像网络 config.toml 骨架3.1 改 Windows 侧的 .wslconfig关键点先说清楚.wslconfig 是放在 Windows 用户目录下的不是 WSL 里的。路径是C:\Users\你的用户名\.wslconfig也就是%UserProfile%\.wslconfig。用 PowerShell 直接打开记事本编辑notepad $env:USERPROFILE\.wslconfig如果文件不存在记事本会问你要不要新建选是。写入最小可用配置[wsl2] networkingModemirrored这是让 403 消失的核心一行。mirrored 模式把 Windows 的网络接口镜像进 LinuxWSL 拿到的地址和局域网同网段localhost 回调在两侧语义一致浏览器跳转回来就能命中 WSL 里的服务。想要更完整的配套能力可以用下面这版[wsl2] networkingModemirrored dnsTunnelingtrue autoProxytrue firewalltrue hostAddressLoopbacktrue逐项说明一下方便你按需取舍配置项作用是否建议开networkingModemirrored镜像网络解决 localhost 回调错位必开dnsTunnelingtrueDNS 隧道支持的机器上通常默认启用建议开autoProxytrue自动继承 Windows 代理设置按需firewalltrue启用 Hyper-V 防火墙按需hostAddressLoopbacktrue允许用 Windows 主机网卡 IP 互连不只 127.0.0.1登录回调场景建议开hostAddressLoopback 对「浏览器跳转 localhost 回调」的登录流程经常有帮助因为有些流程回调地址不一定是纯 127.0.0.1可能带上主机网卡地址。改完必须重启 WSL 虚拟机才生效注意是wsl --shutdown不是关掉终端窗口wsl --shutdown然后重新打开你的 Ubuntu 终端。这一步不做配置等于没改。3.2 处理 codex 登录回调端口冲突mirrored 模式下 Windows 和 Linux 共享端口空间端口冲突会比 NAT 模式更常见。如果 codex 登录回调端口比如 1455总是绑定失败可以在 .wslconfig 里用 ignoredPorts 放行让 Linux 能在该端口绑定即使 Windows 也在用[wsl2] networkingModemirrored ignoredPorts1455这个选项适合「只在 Linux 内部流量」的场景。改完同样要wsl --shutdown重启。3.3 写 codex 的 config.toml 骨架网络通了之后把调用侧配好。codex 的配置文件一般在~/.codex/config.tomlWSL 里的家目录下。一个可复制的骨架# ~/.codex/config.toml model gpt-5-codex [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat然后在 WSL 的 shell 里导出 Key建议写进~/.bashrc或~/.zshrcexport TAOTOKEN_API_KEY你的Key改完 source 一下source ~/.bashrc注意base_url 用 https://taotoken.net/api不要带任何查询参数。env_key 的名字要和 export 的变量名完全一致大小写敏感。4. 逐步验证网络连通性、登录跳转、API 调用配置写完别急着登录按顺序验证出问题好定位。4.1 确认镜像网络已生效在 WSL 里看 IPip addrmirrored 生效时你通常会看到 WSL 获得与局域网同网段的地址而不是 NAT 模式那种 172.x 私有段。另一个判断方式是看启动时控制台有没有类似「falling back to NAT / not supported」的提示有的话说明没生效一般靠更新 Windows 和 WSL 版本解决。4.2 验证 API 通道连通先用 curl 打一下接口确认 Key 和网络都通curl -s https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY | head -c 500能返回模型列表或正常 JSON说明通道没问题。如果这里就报 401是 Key 的问题报连接超时是网络的问题回到 4.1 检查 mirrored 是否真的生效。4.3 验证 codex 登录跳转在 WSL 里执行 codex 的登录命令具体命令以你安装的版本为准通常是codex login或插件里的登录按钮。此时浏览器应该能正常跳转授权后回调到 WSL 里的本地服务不再出现 403。如果还是 403重点检查两处一是 .wslconfig 是否真的重启生效二是回调端口是否被 Windows 占用用 3.2 的 ignoredPorts 放行。4.4 验证实际调用登录成功后在 WSL 里跑一次真实请求比如让 codex 解释一段代码或生成一个函数。能正常返回内容说明「登录 调用」整条链路通了。如果登录成功但调用报错多半是 config.toml 里的 base_url 或 env_key 写错了对照 3.3 检查。5. 本篇常见错排查改了 .wslconfig 没反应九成是没执行wsl --shutdown。关终端窗口不算重启虚拟机必须用命令。执行后重新打开 Ubuntu。启动提示 falling back to NAT说明当前 Windows/WSL 版本不支持 mirrored或者配置项拼写有误。先检查networkingModemirrored有没有写错再考虑更新 WSLwsl --update。登录还是 403先确认 4.1 的 IP 已经是同网段地址。如果 IP 对了还 403检查是不是浏览器缓存了旧的授权页换个无痕窗口再试。另外确认回调端口没被占用必要时加 ignoredPorts。curl 报 401Key 无效或没导出。用echo $TAOTOKEN_API_KEY确认变量有值注意别把引号也带进去。curl 报连接超时mirrored 没生效或者 Windows 侧网络本身有问题。先在 Windows 浏览器里打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contenthomeutm_campaignrewrite 确认能访问再回 WSL 排查。config.toml 改了不生效codex 可能缓存了配置重启一下 codex 进程。另外确认文件路径是~/.codex/config.toml不是项目目录下的。端口冲突反复出现mirrored 下这是常态把常用回调端口都加进 ignoredPorts用逗号分隔比如ignoredPorts1455,1456。6. 接入与后续按场景选入口网络和登录跑通之后接下来看你主要拿它干什么入口不一样。如果你还在排障阶段或者要正式接入项目重点看 API Keys 和接入文档把 Key 管理和 base_url 配置固化下来API Keyshttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你只是想验证某个模型在当前网络下通不通直接用模型对话页面发消息最快模型对话https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite如果你是长期在 WSL 里做编码、跑 Agent 任务建议走 Coding Plan额度和管理方式更适合持续使用Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite最后补一个实操细节mirrored 模式下 WSL 和 Windows 共享端口如果你同时跑多个本地服务端口规划要提前想好别等冲突了再回头改。把 ignoredPorts 当成常备手段遇到绑定失败先查端口占用比反复重启 WSL 省时间。