认证授权
Claude Code 支持多种认证方式:OAuth 2.0(主要)、API Key(备用)和 SSO(企业)。
认证流程
启动时
│
├── 检查 ANTHROPIC_API_KEY 环境变量
│ └── 存在 → 直接使用 API Key 模式
│
├── 检查 OAuth Tokens (~/.claude/oauth/)
│ ├── Access Token 有效 → 直接使用
│ └── Access Token 过期 → Refresh Token 续期
│
└── 无凭据
├── console.anthropic.com OAuth 流程
│ ├── 打开浏览器 → 授权页面
│ ├── 本地 HTTP 回调监听
│ └── 获取 tokens → 保存
└── SSO/OIDC(企业配置)OAuth 2.0 实现
OAuth 配置分为 PROD_OAUTH_CONFIG 和 STAGING_OAUTH_CONFIG 两份,包含授权端点、Token 端点、clientId、redirectUri 和 scopes 等字段。
登录流程(authLogin 位于 src/cli/handlers/auth.ts):
- 生成 PKCE challenge(
generateCodeVerifier/generateCodeChallenge位于src/services/oauth/crypto.ts) - 构建授权 URL 并打开浏览器
- 本地 HTTP 服务器监听回调,获取授权码
- 用授权码交换 token
- 存储 token 到
~/.claude/oauth/
Token 管理
Token 刷新通过 refreshOAuthToken(src/utils/auth.ts)实现,另有 checkAndRefreshOAuthTokenIfNeeded 用于检查并按需刷新。流程:
- 加载已存储的 token
- 用 refresh_token 向 token 端点发请求
- 获取新 token 后存储
- 失败时返回 null,需要重新登录
API Key 模式
API provider 通过环境变量检测和配置解析确定,优先级:
ANTHROPIC_API_KEY→ Anthropic providerAWS_ACCESS_KEY_ID→ Bedrock providerGOOGLE_APPLICATION_CREDENTIALS→ Vertex provider- 无环境变量 → 降级到 OAuth 流程
登出
登出由 performLogout(src/commands/logout/logout.tsx)实现,主要步骤:
- 移除 OAuth tokens
- 清除 API key 缓存
- 关闭相关服务