cc-sync
一款可以从
cc-switch导出 ChatGPT OAuth 登录凭证,支持 CPA / Sub2API / Cockpit / 9Router 四种代理格式,的工具
项目背景
cc-switch 是一个 AI 客户端配置管理工具,把多个 OpenAI ChatGPT 账号的 OAuth session 信息(id_token、access_token、refresh_token、session_token)统一存储在 SQLite 中。
但 cc-switch 的数据库格式和各个代理工具(cli-proxy-api、Sub2API、Anti-Gravity Cockpit、9Router 等)所需的导入格式不同。cc-sync 就是中间的格式转换桥 + 令牌刷新工具。
为什么需要代理?
refresh_token 换新令牌需要调用 Auth0 端点:
POST https://auth0.openai.com/oauth/token
这里有两个问题:
1. client_id 未公开
Auth0 的 client_id 参数(app_EMoamEEZ73f0CkXaXp7hrann)不是公开文档里的值 ------ 它是从已有的 OAuth id_token 的 aud 声明中提取出来的。没有这个参数,refresh 请求会返回 unauthorized_client。
2. Cloudflare 阻断非浏览器请求
auth0.openai.com 前面有 Cloudflare 防护。Python 的 urllib / requests 的 TLS 指纹与真实浏览器差异明显,Cloudflare 会直接返回 403 Forbidden。
解决方案是使用 curl(它有更接近浏览器的 TLS 指纹)并通过本地代理中转:
bash
curl -s -x http://127.0.0.1:7897 \
-H "Content-Type: application/json" \
-H "User-Agent: Mozilla/5.0 ..." \
-H "Origin: https://chatgpt.com" \
-d '{"grant_type":"refresh_token","client_id":"app_EMoam...","refresh_token":"rt_..."}' \
https://auth0.openai.com/oauth/token
脚本内置了这一逻辑,只需传入 --proxy 参数即可。
不需要代理的情况: 如果只用
--no-refresh导出数据库中已有的令牌,则不需要代理。
安装
依赖
- Python 3.12+
- curl(用于令牌刷新)
bash
git clone https://github.com/hzhsec/cc-sync.git
cd cc-sync
pip install -r requirements.txt # 实际上无外部依赖,仅 Python 标准库
快速开始
1. 查看帮助
bash
python export_codex.py --help
2. 只导出不刷新(适用于已有有效令牌)
bash
python export_codex.py --no-refresh
输出到当前目录:
xx@gmail.com.cpa.2026-05-12_09-26-01.json
xx@gmail.com.sub2api.2026-05-12_09-26-01.json
xx@gmail.com.cockpit.2026-05-12_09-26-01.json
xx@gmail.com.9router.2026-05-12_09-26-01.json
...
3. 刷新令牌后导出(如果令牌失效)
bash
python export_codex.py --proxy http://127.0.0.1:7897
4. 指定输出目录
bash
python export_codex.py --output ./exports
5. 只导出特定格式
bash
python export_codex.py --formats cpa sub2api
6. 只导出某个账号
bash
python export_codex.py --account quposev825dd
7. 指定数据库路径
bash
python export_codex.py --db ~/.cc-switch/cc-switch.db
实测CPA可以用
输出格式
CPA
用于 cli-proxy-api 等 OpenAI Codex 代理工具。
json
{
"type": "codex",
"account_id": "00000000-0000-4000-9000-000000000000",
"email": "mark@example.com",
"plan_type": "plus",
"id_token": "eyJhbGciOiJub25l...",
"id_token_synthetic": true,
"access_token": "eyJhbGciOiJSUzI1Ni...",
"session_token": "eyJhbGciOiJkaXIi...",
"last_refresh": "2026-05-12T04:43:58.105Z",
"expired": "2026-08-06T14:29:36.155Z"
}
Sub2API
Sub2API 格式 ------ 订阅转 API 代理配置。
json
{
"accounts": [{
"platform": "openai",
"type": "oauth",
"credentials": {
"access_token": "eyJ...",
"chatgpt_account_id": "...",
"expires_in": 7465538
}
}]
}
Cockpit
json
{
"type": "codex",
"id_token": "eyJhbGciOiJub25l...",
"access_token": "eyJ...",
"account_id": "...",
"email": "mark@example.com",
"expired": "2026-08-06T14:29:36.155Z"
}
9Router
9Router 格式。
json
{
"accessToken": "eyJ...",
"testStatus": "active",
"providerSpecificData": {
"chatgptAccountId": "...",
"chatgptPlanType": "plus"
},
"provider": "codex",
"authType": "oauth"
}
完整示例见 examples/ 目录。
项目结构
cc-sync/
├── export_codex.py # 主脚本
├── examples/ # 各格式示例(占位符)
│ ├── mark@example.cpa.2026-05-12_12-44-36.json
│ ├── mark@example.sub2api.2026-05-12_12-44-12.json
│ ├── mark@example.cockpit.2026-05-12_12-44-24.json
│ └── mark@example.9router.2026-05-12_12-44-31.json
├── LICENSE
└── README.md
项目地址
https://github.com/hzhsec/cc-sync
✨ 文末小福利 ✨
一直在找流量够用、月租不贵的手机卡?
这款我们读者都在用的19元/29元超值大流量卡,推荐给你:
✅ 长期套餐,资费稳定
✅ 全国通用,不限速
✅ 免费申请,包邮到家
👇 点击下方卡片扫码,立即领卡 👇
或者复制链接