Repository navigation
feat(accounts): allow setting web access token for reset credits on PAT accounts - #161
2han9wen71an wants to merge 4 commits into
Conversation
9746aa9 to
8797270
Compare
8797270 to
45ae692
Compare
|
感谢提交这个 PR,也感谢把遇到的场景和处理思路整理得这么详细。 目前我这边暂时没有这类 我看了一下 sub2api 的实现,可以作为一个参考:它的重置卡请求仍使用账号原有的 能否先参考这个方向,核对一下请求头、账号标识和 PAT 的刷新处理,并在可用于测试的真实账号上验证重置卡查询与使用?如果方便,也请补充修复前后的复现步骤、版本、出站环境以及脱敏后的 HTTP 状态和必要错误信息,帮助区分凭据权限问题与请求实现差异;不需要提供真实 Token、Cookie 或其他敏感凭据。 如果实测确认这类账号确实需要独立的网页 Token,我们再基于验证结果讨论双凭据方案,会更容易确认改动范围和维护方式。辛苦了! |
|
感谢作者的详细说明!这里澄清一下核心场景与 sub2api 机制上的区别: 1. 为什么 sub2api 可以直接复用原来的 token?在 sub2api 语境下,大家导入的所谓 2. CPR 中
|
|
谢谢补充,保留原有 PAT、不因配置重置卡而覆盖主凭据的需求可以理解。我又沿着 sub2api 的导入、凭据保存和重置卡请求链路核对了一遍,有一点需要澄清:从 下面仍引用上一条评论中的固定提交
重置卡路径仍通过共享 TokenProvider 获取账号原有凭据,而 TokenProvider 明确跳过 PAT 的 OAuth 自动刷新。因此,“sub2api 能复用原 Token,是因为使用的都是网页 Session Access Token”还不足以解释这里的差异。 当然,上述源码也不能证明真实 PAT 一定能成功查询或消费重置卡。我这边仍没有可用于独立复现的 PAT,所以希望补充的是同一账号、相同出站环境及必要请求头下的实测对照:原始 PAT 与网页 Access Token 查询重置卡时各自的 HTTP 状态和脱敏错误,以及已有的消费验证结果,并注明版本、账号标识和请求头的处理方式。无需提供真实 Token、Cookie,也不必为了验证额外消耗重置卡。 如果对照结果确认请求实现无误、这类 PAT 确实缺少重置卡接口权限,再讨论独立网页 Token 的保存、过期和更新方式,就有明确依据了。感谢帮忙核实! |
|
感谢作者的严谨分析!为了给架构设计提供明确的依据,我在服务器上针对真实账号和相同网络出站环境下,对重置卡只读查询端点进行了完整的对比测试(仅调用 1. 测试环境
2. 测试组 A:使用原始 PAT (
|
45fd212 to
c79e032
Compare
profiles/me and the reset-credits endpoints share the same account-scoped auth; prefer the configured web access token and stop rejecting accounts whose primary access token expired but carry a valid web session token.
Summary
为支持通过
at-xx(Codex Personal Access Token / PAT)进行 API 调用的账号单独填入网页 Access Token(Bearer ey...)以使用主动额度重置卡(Rate Limit Reset Credits),无需通过重新授权覆盖原有的 PAT 凭据。背景与问题
/codex/responses)支持使用 PAT(at-xx);/wham/rate-limit-reset-credits)是 ChatGPT Web 端的特权端点,只接受 ChatGPT Web Access Token(Bearer ey...格式的 JWT),不接受at-令牌。at-凭据请求上游,上游返回 401 Unauthorized;refresh_token,直接报错"账号没有刷新令牌,请重新授权"。at-令牌。解决方案
CodexOAuthCredentialData与CodexOAuthSecret中新增可选的web_access_token字段(持久化在 PostgreSQL JSONB 中,天然兼容已有数据)。CodexRuntimeAuthentication中新增reset_credits_authorization_header:专用于额度重置卡接口,优先使用web_access_token,回退使用主access_token。API 调用仍严格使用原有access_token(at-xx),互不影响。list_reset_credits/consume_reset_credit前置检测:若为at-账号且未配置web_access_token,直接返回提示需配置网页 Access Token,避免上游 401 无谓请求;refresh_token账号精准提示"网页 Access Token 已过期或失效,请重新填入网页 Access Token",阻断失败的自动刷新。POST /api/admin/accounts/web-token,接收{ accountId, webAccessToken };ResetCredits.vue):检测到未配置或过期提示时,弹窗内就地展开“配置网页 Access Token”卡片,支持一键“保存并查询”立即加载并兑换卡片;并在标题栏提供 Globe 图标随时主动展开配置。AccountTableActions.vue+AccountWebTokenModal.vue):在操作菜单中新增“配置网页 Token”项,提供独立弹窗支持查看、更新或清除 Token。Verification
cargo check --workspace编译通过cargo clippy -p provider-openai -p gateway-admin -p gateway-api0 警告cargo test -p gateway-admin(171 个测试全过)cargo test -p gateway-api(354 个测试全过,包含新增的 web-token 路由与校验测试)cargo test -p provider-openai credential::(201 个测试全过,包含凭据隔离与 CAS 更新测试)pnpm run typecheck(TypeScript 严格模式 0 错误)pnpm run build(Vite 生产构建成功)