基于 @anthropic-ai/claude-code v2.1.88 逆向分析
- Claude.ai OAuth — PKCE 流程,主要方式
- 环境变量 OAuth —
CLAUDE_CODE_OAUTH_TOKEN(CCR/Desktop) - FD OAuth —
CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR(CCR 子进程) - API Key Helper — 用户定义脚本(5 分钟缓存)
- 直接 API Key —
ANTHROPIC_API_KEY - Auth Token —
ANTHROPIC_AUTH_TOKEN
- 生成 Code Verifier (32 random bytes base64url) + State (CSRF)
- 启动 localhost HTTP 监听器
- 打开浏览器授权 URL
- 用户授权 → 回调带 auth code
- exchangeCodeForTokens() → access + refresh token
- 保存到 Keychain / .credentials.json
- macOS: Keychain ("Claude Code-credentials")
- Linux: ~/.claude/.credentials.json
- 安全措施:
security -i隐藏进程参数
- 自动检测过期(5 分钟缓冲)
- 多进程文件锁同步
- 最多 5 次重试
- 跨进程 .credentials.json mtime 监控
| 作用域 | 用途 |
|---|---|
| user:inference | 推理访问 |
| user:profile | 用户信息 |
| user:sessions:claude_code | 会话管理 |
| user:mcp_servers | MCP 访问 |
| user:file_upload | 文件上传 |
启动时并行执行 OAuth + API Key 两个 keychain 读取,与模块导入重叠(~65ms)。
| 文件 | 职责 |
|---|---|
| services/oauth/client.ts | OAuth 客户端 |
| services/oauth/auth-code-listener.ts | 本地回调监听 |
| utils/auth.ts (2000+行) | 认证主逻辑 |
| utils/secureStorage/macOsKeychainStorage.ts | Keychain 存储 |
| utils/secureStorage/keychainPrefetch.ts | 预取优化 |
| constants/oauth.ts | 端点和作用域 |
| commands/login/ | /login 命令 |
| commands/logout/ | /logout 命令 |