ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Codex OAuth+PKCE二次登录全解:Gpt-Agreement-Payment如何拿到refresh_token

Codex OAuth+PKCE二次登录全解:Gpt-Agreement-Payment如何拿到refresh_token Codex OAuthPKCE二次登录全解Gpt-Agreement-Payment如何拿到refresh_token【免费下载链接】Gpt-Agreement-PaymentChatGPT Plus/Team/Pro 订阅协议端到端重放工具集 · hCaptcha 视觉求解器 · 反欺诈机制实证研究 / End-to-end protocol replay toolkit for ChatGPT Plus/Team/Pro subscription with from-scratch hCaptcha solver and empirical anti-fraud research项目地址: https://gitcode.com/gh_mirrors/gp/Gpt-Agreement-PaymentGpt-Agreement-Payment 是 ChatGPT Plus / Team / Pro 订阅协议的端到端重放工具集。它的注册和支付完成后只拿到会话凭证session_token / access_token真正长期可用的 OAuthrefresh_token要靠最后一环——Codex OAuth PKCE 二次登录来换取。本文带你完整看懂这条链路为什么要二次登录、authorize URL 里藏了哪些关键参数、PKCE 的 verifier / challenge 如何配对以及项目里两条实现路径Camoufox 真浏览器重登、纯协议重放分别怎么走。一、为什么注册完还不能直接拿 refresh_token很多新手会疑惑注册都成功了为什么 refresh_token 是空的这是 OpenAI 侧的一个实证结论项目 daemon 全量日志验证过signup 刚完成时auth.openai.com 的 hydra session 还只是注册挑战态不是完整用户会话此时发起 Codex OAuth 换取 refresh_token 会100% 返回token_exchange_user_error。所以项目的策略是注册阶段跳过 Codex 换 RT环境变量SKIP_SIGNUP_CODEX_RT1省掉每次约 30 秒的无效尝试支付成功、账号真正活了之后用账号邮箱 密码重新登录一次重走 Codex OAuth 流程拿 refresh_token这也是二次登录这个名字的由来。整体链路在 docs/architecture.md 的Codex OAuth PKCE 二次登录一节有完整描述注册(Camoufox) → 支付(Stripe/PayPal) → 二次登录(Codex OAuth PKCE) → refresh_token 落库(output/webui.db)二、Codex authorize URL三个关键参数缺一不可二次登录的第一步是构造一条专门的 Codex 授权地址默认值见 CTF-reg/auth_flow.py 的_build_codex_authorizeGET https://auth.openai.com/oauth/authorize ?client_idCodex 专用 client_id response_typecode redirect_urihttp://localhost:1455/auth/callback scopeopenid email profile offline_access state随机 base64url code_challengePKCE challenge code_challenge_methodS256 id_token_add_organizationstrue codex_cli_simplified_flowtrue三个关键点理解它们就理解了整条链路参数作用为什么重要client_idCodex 专用 OAuth 客户端默认app_EMoamEEZ73f0CkXaXp7hrann它是公开客户端public client没有 client_secret安全性完全靠 PKCE 保证scope中的offline_access申请离线访问权限这是拿到 refresh_token 的开关。没有这个 scope/oauth/token只会返回 access_tokenredirect_uri固定回http://localhost:1455/auth/callback模仿 Codex CLI 本地回调端口是后续拦截 callback 提取code的锚点其中codex_cli_simplified_flowtrue和id_token_add_organizationstrue用于让授权走简化流程减少中途跳回/log-in的概率。三、PKCE 最小知识verifier 与 challenge 如何配对PKCEProof Key for Code Exchange的核心是一对值项目里由 auth_flow.py 的_build_pkce_pair生成code_verifier64 字节随机数的 base64url长度约束在 43~128符合 RFC 标准code_challengebase64url( SHA256(code_verifier) )方法固定为S256流程分两半authorize 阶段只把code_challenge发给服务端token 交换阶段才把原始code_verifier提交上去服务端验证challenge SHA256(verifier)通过才放行。好处是即使中间人截获了 callback 里的code没有 verifier 也换不到 token。对无 secret 的公开客户端来说PKCE 就是它的密码。四、完整二次登录流程Camoufox 重登路径主路径是 CTF-pay/card/_monolith.py 的_exchange_refresh_token_with_session支付成功后拉起一个全新Camoufox 实例Windows 模拟 1920×1080 屏幕 geoip 地理一致 en-US 语言完整步骤如下goto authorize URL—— 被重定向到auth.openai.com/log-in填邮箱 → 继续 → 填密码 → 继续—— 真浏览器自动化完成可能触发 TurnstileCamoufox 自动过或邮箱 OTP走 CF Email Worker → KV毫秒级落库选择 workspace→ Codex consent 页自动 Continue拦截 callback—— 用 Playwright 的page.route钩住http://localhost:1455/**从 URL 里提取code注意只提取、不真正消费这个 callback换 token—— POST/oauth/token表单参数grant_typeauthorization_code、client_id、code、redirect_uri、code_verifier响应里取出refresh_token与access_token落库第 5 步的拦截细节可以看 CTF-reg/drivers/browser.py 中 browser 注册路径的同类实现逻辑完全一致注册态也会尝试这套流程默认跳过见下文常见坑。五、另一条路纯协议换 RTauth_flow.py不想开浏览器时CTF-reg/auth_flow.py 提供了oauth_codex_rt_exchange纯 HTTP 实现同一目标用同一套参数构造 authorize URL可控 PKCE_follow_authorize_for_callback逐跳跟随 302 重定向链只捕获 callback 不消费若被重定向打回/log-in用_codex_drive_login_from_log_in补走一次纯协议登录sentinel token → 邮箱 → 密码 → 邮箱 OTP再回到授权链若命中add-phone死胡同可开启刷新重试策略默认开启重发 3 次 authorize 碰运气最后由 _exchange_codex_callback_code 校验state一致后 POST/oauth/token完成交换两条路径互为备份浏览器路径稳、协议路径快都指向同一个终点——/oauth/tokencode_verifier。六、常见坑与环境变量速查⚠️坑 1注册完立刻换 RT。signup 态的 hydra session 换不出 Codex tokentoken_exchange_user_error。保持默认SKIP_SIGNUP_CODEX_RT1让 RT 由后续重登拿。⚠️坑 2scope 漏掉offline_access。换来的 token 集里没有 refresh_token且无法补救必须重走流程。⚠️坑 3state 不匹配。authorize 时的随机state必须与 callback 返回的一致不一致视为 CSRF 攻击直接拒绝交换。环境变量默认值说明OAUTH_CODEX_CLIENT_ID内置默认值覆盖 Codex OAuth client_idOAUTH_CODEX_REDIRECT_URIhttp://localhost:1455/auth/callback回调地址OAUTH_CODEX_SCOPEopenid email profile offline_access授权范围OAUTH_CODEX_RT_ALLOW_RETRY0允许同一轮重复尝试换 RTOAUTH_CODEX_ADD_PHONE_REFRESH_RETRY1命中 add-phone 时刷新重试 authorizeSKIP_SIGNUP_CODEX_RT1跳过注册态换 RT强烈建议保持更多协议链路细节可参考 docs/operating-modes.md 与 docs/architecture.md。七、refresh_token 落库与后续用途成功交换后refresh_token 会写入 SQLite 运行时库output/webui.db的registered_accounts/oauth_status表架构见 docs/architecture.md。它的价值在于免密码续期access_token 过期后用 refresh_token 静默换新不再需要邮箱 密码 OTP下游推送Team 计划self-dealer模式里每个 member 的 refresh_token 都绑同一个team_id可长期维持订阅态RT 维护free / paid 账号的 OAuth 状态机由oauth_status表驱动daemon 模式会自动巡检续期小结一句话回顾整条链路注册拿到的是会话Codex OAuth PKCE 二次登录拿到的才是长期授权。核心就四步构造带offline_access S256 PKCE 的 Codex authorize URL → 用邮箱密码重新登录必要时过 OTP→ 拦截localhost:1455callback 提取 code → 带code_verifierPOST/oauth/token换取 refresh_token。看懂这四个环节再结合 CTF-pay/card/_monolith.py 与 CTF-reg/auth_flow.py 两条源码路径对照阅读你就能完整掌握这个项目的最后一公里。【免费下载链接】Gpt-Agreement-PaymentChatGPT Plus/Team/Pro 订阅协议端到端重放工具集 · hCaptcha 视觉求解器 · 反欺诈机制实证研究 / End-to-end protocol replay toolkit for ChatGPT Plus/Team/Pro subscription with from-scratch hCaptcha solver and empirical anti-fraud research项目地址: https://gitcode.com/gh_mirrors/gp/Gpt-Agreement-Payment创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表