认证
认证
相关源文件
本章引用的主要源码文件:
crates/jcode-provider-metadata/src/lib.rssrc/auth/integration.rssrc/auth/lifecycle_driver.rssrc/auth/mod.rssrc/cli/auth_test.rssrc/cli/auth_test/choice.rssrc/cli/auth_test/probes.rssrc/cli/auth_test/run.rssrc/cli/auth_test/types.rssrc/cli/login.rssrc/cli/login/scriptable.rssrc/cli/mod.rssrc/cli/output.rssrc/cli/provider_init.rssrc/cli/provider_init/external_auth.rssrc/cli/provider_init_tests.rssrc/config/config_file.rssrc/live_tests.rssrc/provider_catalog.rssrc/provider_catalog_tests.rssrc/tui/app/auth.rs
jcode 实现了一个多提供商认证系统,旨在零配置发现现有凭证,同时为本地会话提供安全的管理方式。该系统支持多种流程,涵盖标准 API 密钥和环境变量、基于 PKCE 的 OAuth2 以及对 IDE 数据库的直接 SQLite 探测。
认证架构
该系统的核心是 AuthStatus 结构体,它充当所有支持提供商状态的集中注册表 src/auth/mod.rs:33-36。认证发现遵循层级化的"瀑布"方法:它首先检查本地 jcode 凭证,然后查找"未授权"的外部凭证(例如来自 Claude Code 或 Cursor),最后回退到环境变量。
凭证发现逻辑
系统对任何给定提供商区分三种主要状态 src/auth/mod.rs:34:
Available(可用):找到有效凭证并可供使用。Expired(已过期):存在配置但需要刷新(常见于 OAuth 流程)。NotConfigured(未配置):在任何已知位置均未检测到可用凭证。
认证实体关系 此图将逻辑提供商名称与内部代码结构及其各自的发现逻辑关联起来。
来源:src/auth/mod.rs:33-57、src/auth/mod.rs:174-195、crates/jcode-provider-metadata/src/lib.rs:105-116
OAuth2 与本地存储
对于 Anthropic(Claude)、OpenAI 和 Google 等提供商,jcode 支持完整的基于 PKCE 的 OAuth2 流程。这包括一个本地 TCP 回调监听器,用于捕获授权码,而无需远程重定向代理 src/tui/app/auth.rs:37-54。
- 凭证存储:本地凭证和环境文件存储在特定位置。例如,OpenAI 使用
openai.envsrc/cli/auth_test/probes.rs:16,而 Azure 使用其自己的环境文件src/cli/auth_test/probes.rs:19。 - 缓存:为防止在 TUI 渲染期间进行昂贵的磁盘 I/O 和 PATH 扫描,
AuthStatus结果会缓存在AUTH_STATUS_CACHE(30 秒 TTL)和FAST_CACHE(60 秒 TTL)中src/auth/mod.rs:45-51。 - 验证:系统使用
LiveVerificationCheckpointDefinition来跟踪成功的认证事件,例如auth_ux_key_entry和credential_persistencesrc/live_tests.rs:40-73。
有关 OAuth 生命周期和文件格式的详细信息,请参阅 OAuth2 流程与凭证存储。
外部提供商发现
jcode 的一个关键特性是能够从其他已安装工具"借用"凭证。这是通过特定模块处理的,这些模块会探测文件系统以查找第三方配置文件或 CLI 状态。
| 提供商 | 发现机制 | 代码位置 |
|---|---|---|
| Claude | Claude Code / OpenCode | probe_claude_auth src/cli/auth_test/probes.rs:69-73 |
| Copilot | GitHub CLI / VS Code | copilot_auth_state_from_credentials src/auth/mod.rs:162-172 |
| Cursor | IDE SQLite 数据库 | LoginProviderTarget::Cursor crates/jcode-provider-metadata/src/lib.rs:35 |
| Gemini | Google CLI / OAuth | probe_gemini_auth src/cli/auth_test/probes.rs:133-145 |
凭证瀑布发现 此图将 check 逻辑映射到其交互的特定文件实体。
来源:src/auth/mod.rs:174-195、src/cli/auth_test/probes.rs:1-33、src/cli/auth_test/probes.rs:95-100
有关如何探测特定提供商以及如何授予外部来源授权的详细信息,请参阅 提供商特定认证。
安全与管理
jcode 实现了严格的凭证验证系统。AuthReadinessLevel 枚举跟踪提供商的功能状态,从 None 到 Authenticated,甚至对于 Azure 还有 DeploymentValid src/auth/mod.rs:123-160。
- 交互式管理:
/account命令打开提供商管理中心,而/login <provider>启动特定流程src/tui/app/auth.rs:161-163。 - 认证诊断:用户可以运行
jcode auth doctor <provider>进行引导式诊断,以解决连接或凭证问题src/tui/app/auth.rs:56-59。 - 外部信任:系统在配置中跟踪
trusted_external_sources,以允许或拒绝使用从其他工具发现的凭证src/config/config_file.rs:182-193。
来源:src/auth/mod.rs:123-160、src/tui/app/auth.rs:134-164、src/config/config_file.rs:182-193