
一个 Codex 凭证里的 SIWC 与 Codex OAuth 各走各的:外层还正常,实际在用的那套失效了,面板上没有字段能看出来;本期给出现成可查的四个字段、两处会把失效记录抹掉的代码,以及今晚重绑与回退的顺序。
access_token。另一套叫 SIWC,放在同一个文件的 siwc 段里。use_siwc 为真时,请求带的是 siwc.access_token,目标域名也换成 api.openai.com/v1。
internal/runtime/executor/codex_executor_auth.go 第 463–476 行:codexUseSIWC(a) 成立就取 codexSIWCAccessToken(a),base URL 为空时落到 defaultOpenAISIWCBaseURL,函数在这里直接返回。2GET /v8/management/credentials 里,codex 条目会多出几个不敏感字段。| 字段 | 读到什么 |
|---|---|
use_siwc | 请求是否走 SIWC |
siwc_bound | access、refresh、client_id 是否齐全 |
siwc_expires_at | 存下来的到期时间 |
siwc_bind_supported | 这条凭证能不能走绑定流程 |
siwc_bound 只表示字段齐全。官方文档自己写着「not a live validity check」,不是有效性检查。3authAccessToken 在 SIWC 模式下返回的就是 SIWC token,记下的是它。
sdk/cliproxy/auth/conductor_cooldown.go 第 1298–1306 行:401 且凭证带 refresh token 时,auth.RejectedAccessToken = currentToken,并安排一次刷新。5
sdk/cliproxy/auth/conductor_refresh.go 第 1018–1027 行:updated.RejectedAccessToken = "",随后把 StatusError 改回 StatusActive。8
internal/runtime/executor/codex_executor_auth.go 第 422–435 行:只有两边都没刷成功才返回错误;只外层成功、SIWC 失败时,只留一行 log.Warnf,函数照常返回。9status 字段,off、valid、invalid。use_siwc 没开就是 off;access token 在、没到真实到期、也没被 OpenAI 明确拒过,就是 valid;其余都是 invalid。expires_in,别用已经扣掉提前量的 expired。curl -s -H "Authorization: Bearer <管理密钥>" \
http://<面板地址>:<端口>/v8/management/credentials \
| jq '.files[] | select(.provider=="codex") | {name, status, unavailable, use_siwc, siwc_bound, siwc_expires_at}'use_siwc 缺席或为假,就不用往下看了,这条凭证不走 SIWC。siwc_bound 为假,说明绑定缺字段,直接跳到第三步。siwc_expires_at 已经过去,也直接跳到第三步。grep "outer token refreshed but SIWC token refresh failed" <你的日志>curl -s -X POST -H "Authorization: Bearer <管理密钥>" \
-H "Content-Type: application/json" \
-d '{"name":"<凭证 ID 或文件名>"}' \
http://<面板地址>:<端口>/v8/management/oauth/siwc/bindurl 在浏览器里走完 OpenAI 登录,再把浏览器落地的那条完整回调地址交回:curl -s -X POST -H "Authorization: Bearer <管理密钥>" \
-H "Content-Type: application/json" \
-d '{"provider":"codex","redirect_url":"http://127.0.0.1:1455/auth/callback?state=...&code=..."}' \
http://<面板地址>:<端口>/v8/management/oauth/callbackGET /v8/management/oauth/status?state=...,等到 ok;wait 是还在换令牌,别当失败重开。use_siwc 改成 false,请求回落到原来那条常规路径。| 仓库 | 当前版本 | 发布(北京) | 主干 |
|---|---|---|---|
| CLIProxyAPI | v8.0.36 | 10-21 01:18 | main 01:11、dev 02:21 |
| sub2api | v0.2.17 | 10-16 12:41 | main 停在 10-19 20:45 |
| codex-proxy | v2.1.19 | 10-20 05:10 | dev 停在 10-20 04:57 |
| codex2api | v3.1.1 | 10-17 05:46 | main 停在 10-21 01:01 |
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
status.anthropic.com
status.cloud.google.com
codex-reset.com
opentherank.com
community.openai.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.