Skip to content

refactor(aegis): 重构 Extractor/Verifier/Decryptor 架构,清晰化职责边界#31

Merged
heliannuuthus merged 4 commits intomainfrom
refactor/decryptor-verifier-architecture
Mar 5, 2026
Merged

refactor(aegis): 重构 Extractor/Verifier/Decryptor 架构,清晰化职责边界#31
heliannuuthus merged 4 commits intomainfrom
refactor/decryptor-verifier-architecture

Conversation

@heliannuuthus
Copy link
Owner

@heliannuuthus heliannuuthus commented Mar 4, 2026

Summary

  • Extractor 降级为非导出桥梁:仅持有 audience + Provider + ExtractKID,不再管理 Verifier 实例和缓存
  • Decryptor 成为统一入口:内化 Extractor 创建,持有 per-clientID 的 Verifier 工厂方法,构造方法简化为 (audience, encryptKeyProvider, publicKeyProvider)
  • Verifier 嵌入 extractor:直接获得 audienceProviderExtractKID 能力,自身管理 typed key 缓存和 rebuild
  • Footer 封装优化ParseFooter 改为 Footer.Unmarshal 方法,ExtractKID 内化到 extractor,不再对外暴露解析细节
  • SeedProvider API 统一:优化密钥派生与组件架构
  • Interpreter 简化:移除冗余的 Extractor 创建和 verifier 工厂,统一通过 Decryptor.Verifier(clientID) 路由

Changes

架构变更

  • Extractor:导出 → 非导出(extractor),纯数据桥梁
  • Decryptor:嵌入 *Extractor → 持有 extractor *extractor 引用,避免方法提升语义泄漏
  • Verifier:嵌入 *Extractor → 嵌入 *extractor,构造方法非导出
  • NewDecryptor 签名:(ext *Extractor, encryptKeyProvider)(audience, encryptKeyProvider, publicKeyProvider)

命名优化

  • idaudience(Extractor/Decryptor)
  • idclientID(Verifier)

Test plan

  • 编译通过
  • aegis 内部 token service 验签/解密流程正常
  • web interpreter 验签/解密流程正常
  • 密钥热更新(watcher rebuild)正常工作

heliannuuthus and others added 3 commits March 4, 2026 21:04
- Verifier 不再导出构造方法,统一通过 Decryptor.Verifier(clientID) 获取
- 新增 extractor 组件持有 audience(id) 和 signKeyProvider,嵌入 Decryptor
- Verifier 内置 audience 校验(paseto.ForAudience),移除 middleware 层冗余检查
- NewFactory/NewGinFactory 去掉 signKeyProvider 参数,内部自动创建 PublicKeyFetcher
- service.go 统一走 Decryptor 管理 Verifier,去掉独立的 verifiers map
- 删除 LoadKeyFunc/LoadKeysFunc 函数式适配器和 From 方法,统一为 SingleOf/MultiOf 入口
- SeedProvider 导出,Encrypt()/Sign() 返回新实例避免 mutate 陷阱
- NewExtractor 返回 *Extractor 避免 mutex 复制风险
- RelationChecker 缓存 Issuer 实例避免重复 Argon2id 派生
- NewFactory/NewGinFactory 改为显式接收 encrypt/sign Provider
- 清理无用的 Fetcher/Loader 接口
- Extractor 改为非导出的纯桥梁(audience + Provider + ExtractKID),不再管理 Verifier 实例
- Decryptor 不再嵌入 Extractor,改为持有引用;统一管理 per-clientID 的 Verifier 工厂
- Decryptor 构造方法内化 Extractor 创建,外部只需传 audience + 两个 Provider
- ExtractKID 从 paseto 工具包内化到 extractor,footer.go 不再暴露解析函数
- Footer 的 ParseFooter 改为 Unmarshal 方法,ExtractKID 改为非导出
- 字段命名语义化:id → audience / clientID
- Interpreter 中 DetectType + ParseToken 延迟到验签后一次执行
@heliannuuthus heliannuuthus changed the title refactor(aegis): 统一 Verifier 构建归入 Decryptor,内化 signKeyProvider refactor(aegis): 重构 Extractor/Verifier/Decryptor 架构,清晰化职责边界 Mar 5, 2026
- 移除 ComputeSID/ComputePIDFromSeed/ComputeLIDFromSeed 及 paserkSecretPrefix(无引用)
- example.toml: redis 改为结构化配置,captcha 扁平化,移除废弃 sso 段
- wire_gen.go: make generate 重新生成
@heliannuuthus heliannuuthus merged commit de8b2f4 into main Mar 5, 2026
5 checks passed
@heliannuuthus heliannuuthus deleted the refactor/decryptor-verifier-architecture branch March 5, 2026 09:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant