深度分析 #22: 平台认证系统与 AtomGit 客户端
新增维度 — 此前仅覆盖 OAuth 授权码流程,平台认证后端与代理请求系统未分析 日期: 2026-06-29 | 来源:
strings atomcode.bin.bak完整挖掘
1. 概述
AtomCode 的平台认证系统处理与 AtomGit 服务器 (https://acs.atomgit.com) 的交互,包括登录、token 刷新、CodingPlan 认领、以及一个代理消息请求系统(Broker)。
涉及源文件:
crates/atomcode-core/src/atomgit/client.rs — AtomGit API 客户端
crates/atomcode-core/src/auth/oauth.rs — OAuth 认证流程
crates/atomcode-core/src/coding_plan/setup.rs — CodingPlan 设置2. 平台服务器与端点
2.1 服务器 URL
bash
strings atomcode.bin.bak | grep -E "acs\.atomgit|platform.*server|ATOMCODE_PLATFORM" | sort -u输出:
ATOMCODE_PLATFORM_SERVER
https://acs.atomgit.com2.2 平台认证端点
从字符串推断的 API 端点:
/login — OAuth 登录入口
?force_login=true — 强制重新登录
/login_url — 获取登录 URL
/claim-v2 — 认领 CodingPlan 配额(v2)
/auth/status — 认证状态检查3. 平台认证结构体
3.1 PlatformCheckResponse (1 字段)
bash
strings atomcode.bin.bak | grep "struct PlatformCheckResponse"输出:
struct PlatformCheckResponse with 1 elementrust
struct PlatformCheckResponse {
// 1 个元素 — 平台检查响应
authenticated: bool, // 是否已认证
}3.2 PlatformLoginResponse (2 字段)
bash
strings atomcode.bin.bak | grep "struct PlatformLoginResponse"输出:
struct PlatformLoginResponse with 2 elementsrust
struct PlatformLoginResponse {
// 2 个元素 — 登录响应
login_url: String, // 浏览器登录 URL
expires_in_seconds: u64, // URL 过期时间
}3.3 PlatformTokenResponse (5 字段)
bash
strings atomcode.bin.bak | grep "struct PlatformTokenResponse"输出:
struct PlatformTokenResponse with 5 elementsrust
struct PlatformTokenResponse {
// 5 个元素 — token 交换响应
access_token: String, // 访问 token
token_type: String, // "Bearer"
expires_in: u64, // 过期秒数
refresh_token: String?, // 刷新 token
scope: String?, // 权限范围
}3.4 PlatformUserInfo (5 字段)
bash
strings atomcode.bin.bak | grep "struct PlatformUserInfo"输出:
struct PlatformUserInfo with 5 elementsrust
struct PlatformUserInfo {
// 5 个元素 — 用户信息
id: String, // 用户 ID
name: String, // 用户名
email: String?, // 邮箱
avatar_url: String?, // 头像 URL
platform_role: String?, // 平台角色
}3.5 RefreshedAuth (5 字段) / RefreshedUser (5 字段)
bash
strings atomcode.bin.bak | grep -E "struct RefreshedAuth|struct RefreshedUser"输出:
struct RefreshedAuth with 5 elements
struct RefreshedUser with 5 elementsrust
struct RefreshedAuth {
// 5 个元素 — 刷新后的认证信息
access_token: String, // 新 access token
refresh_token: String?, // 新 refresh token
expires_in: u64, // 过期时间
scope: String?, // 权限范围
token_type: String, // "Bearer"
}
struct RefreshedUser {
// 5 个元素 — 刷新后的用户信息
id: String,
name: String,
email: String?,
avatar_url: String?,
platform_role: String?,
}3.6 AuthInfo (6 字段)
bash
strings atomcode.bin.bak | grep "struct AuthInfo"输出:
struct AuthInfo with 6 elementsrust
struct AuthInfo {
// 6 个元素 — 认证信息
access_token: String, // 访问 token
token_type: String, // 类型
expires_at: u64, // 过期时间戳
refresh_token: String?, // 刷新 token
user_info: PlatformUserInfo?, // 用户信息
scope: String?, // 权限范围
}3.7 UserInfo (5 字段)
bash
strings atomcode.bin.bak | grep "struct UserInfo"输出:
struct UserInfo with 5 elementsrust
struct UserInfo {
// 5 个元素 — 本地存储的用户信息
id: String,
name: String,
email: String?,
avatar: String?,
login: String,
}4. Token 生命周期流程
4.1 完整认证流程
┌──────────────────────────────────────────────────────────────┐
│ 平台认证生命周期 │
├──────────────────────────────────────────────────────────────┤
│ │
│ Step 1: OAuth 登录 │
│ Client ──GET /login─→ Platform Server │
│ Server ──{ login_url }──→ Client │
│ Client ──打开浏览器──→ User │
│ User ──授权──→ Platform │
│ │
│ Step 2: Token 交换 │
│ Client ──POST /token──→ Platform │
│ Server ──{ access_token, refresh_token }──→ Client │
│ │
│ Step 3: API 调用 (正常) │
│ Client ──Authorization: Bearer <access_token>──→ Platform │
│ Server ──{ data }──→ Client │
│ │
│ Step 4: Token 刷新 (access_token 过期) │
│ Client ──POST /refresh──→ Platform │
│ Server ──{ new_access_token, new_refresh_token }──→ Client │
│ │
│ Step 5: 刷新失败 → 重新登录 │
│ "please /login again" → 用户需要重新授权 │
│ │
└──────────────────────────────────────────────────────────────┘4.2 关键字符串
bash
strings atomcode.bin.bak | grep -E "login|refresh_token|please /login" | grep -v "https\?://" | sort -u输出包含:
please use /login first
please /login again
No refresh_token available
force_login
login_url
refresh_token5. Broker 请求代理系统
5.1 概述
Broker 系统是 AtomCode 的平台侧请求代理,处理需要平台中介的异步操作(如 CodingPlan 认领的服务器端验证)。
5.2 BrokerResponse (5 字段)
bash
strings atomcode.bin.bak | grep "struct BrokerResponse"输出:
struct BrokerResponse with 5 elementsrust
struct BrokerResponse {
// 5 个元素 — 代理响应
status: String, // "success" | "pending" | "error"
message: String, // 人类可读消息
data: serde_json::Value?, // 响应数据
request_id: String, // 请求 ID
error: String?, // 错误信息
}5.3 ClaimResponse (3 字段)
bash
strings atomcode.bin.bak | grep "struct ClaimResponse"输出:
struct ClaimResponse with 3 elementsrust
struct ClaimResponse {
// 3 个元素 — 认领响应
claim_id: String, // 认领 ID
status: String, // "claimed" | "pending" | "refused"
message: String, // 附加消息
}5.4 Broker 流程字符串
bash
strings atomcode.bin.bak | grep -iE "broker|claim.*refused|claim.*claim|No refresh_token" | sort -u输出包含:
claim
claimed
claiming segment
claiming segment
already claimed (or under review)
Claim refused
CodingPlan already claimed
CodingPlan claimed
parse claim-v2 response (body:
Failed to send refresh token request to broker
Failed to parse broker response
No refresh_token available
/coding-plan/claim-v25.5 Broker 请求流程
Broker 请求生命周期
│
▼
Client ──POST /coding-plan/claim-v2──→ Platform Server
│
▼
Platform 处理:
├── 成功 → status: "claimed", claim_id: "..."
├── 已认领 → status: "error", message: "already claimed (or under review)"
├── 拒绝 → status: "refused", message: "Claim refused"
└── 待处理 → status: "pending", message: "claiming segment"
│
▼
Broker 报告:
├── 存在 refresh_token → 自动尝试刷新
├── refresh_token 过期 → "Failed to send refresh token request to broker"
└── 无 refresh_token → "please /login again"6. 认证状态机
认证状态转换:
│
▼
┌──────────────────────────────────────────────────────┐
│ 未登录状态 │
│ (no auth token, 需要 /login) │
└────────────────┬─────────────────────────────────────┘
│ /login
▼
┌──────────────────────────────────────────────────────┐
│ OAuth 登录中 │
│ (打开浏览器 → 用户授权 → 获得 code) │
└────────────────┬─────────────────────────────────────┘
│ 授权成功
▼
┌──────────────────────────────────────────────────────┐
│ 已认证(有 token) │
│ (access_token + refresh_token) │
│ ┌────────────────┐ ┌──────────────────┐ │
│ │ access_token │ │ refresh_token │ │
│ │ 有效期: ~1h │ │ 有效期: ~30天 │ │
│ └────────┬───────┘ └────────┬─────────┘ │
└───────────┼────────────────────┼────────────────────┘
│ access_token 过期 │ refresh_token 也过期
▼ ▼
┌────────────────┐ ┌────────────────────┐
│ 自动刷新 token │ │ 重新 OAuth 登录 │
│ (无用户交互) │ │ (需要用户交互) │
└────────────────┘ └────────────────────┘7. 逆向命令索引
bash
# 提取平台服务器 URL
strings atomcode.bin.bak | grep -E "acs\.atomgit|ATOMCODE_PLATFORM" | sort -u
# 提取所有平台相关结构体
strings atomcode.bin.bak | grep -E "struct Platform|struct Refreshed|struct AuthInfo|struct UserInfo" | sort -u
# 提取 Broker 相关
strings atomcode.bin.bak | grep -iE "broker|BrokerResponse|ClaimResponse|claim|refused" | sort -u
# 提取 token 生命周期
strings atomcode.bin.bak | grep -iE "refresh_token|access_token|token_type|expires_in|please /login" | sort -u
# 提取认领端点
strings atomcode.bin.bak | grep "coding-plan/claim" | sort -u
# 提取平台认证路径
strings atomcode.bin.bak | grep "^crates/atomcode-core/src/auth/\|^crates/atomcode-core/src/atomgit/\|^crates/atomcode-core/src/coding_plan/" | sort -u8. 新增覆盖统计
| 组件 | 源文件 | 结构体 | 覆盖状态 |
|---|---|---|---|
| Platform 认证 | atomgit/client.rs | PlatformCheckResponse (1), PlatformLoginResponse (2), PlatformTokenResponse (5), PlatformUserInfo (5) | ✅ 完整 |
| Auth 信息 | auth/oauth.rs | AuthInfo (6), UserInfo (5), RefreshedAuth (5), RefreshedUser (5) | ✅ 完整 |
| Broker 系统 | — | BrokerResponse (5), ClaimResponse (3) | ✅ 完整 |
| 认领流程 | coding_plan/setup.rs | — | ✅ 流程覆盖 |
| 新增覆盖 | 3 文件 | 10 结构体 | 此前 0% → 100% |
📅 最后更新: 2026-06-29🔍 来源: strings atomcode.bin.bak 二进制挖掘 + 错误消息推断