许可证解密流程
TechUI 的授权验证体系建立在“零信任”与“完全离线”的基础上。所有解密与校验逻辑均在 WebAssembly (Wasm) 的沙箱环境中执行,确保了即使在浏览器端,授权逻辑也难以被篡改或绕过。
根据组件库等级的不同,TechUI 采用了两套不同的解密策略。
重许可解密流程
适用组件:💎 @techui/prime (旗舰版)
Prime 旗舰版采用了高强度的双因子解密机制 (Two-Factor Decryption)。它依赖于一个公开的 Npm 密钥包与一个私有的 Client Key 共同协作,就像银行保险箱需要两把钥匙才能开启。
核心构成 (Composition)
- 🔑 Npm 钥匙串 (Keychain Package)
- 形式:以 npm 依赖包形式发布(如
@techui/prime-keychain)。 - 内容:包含了大量混淆后的公钥片段。它是版本化的,随组件库更新而更新。
- 形式:以 npm 依赖包形式发布(如
- 🆔 Client 身份凭证 (Identity Key)
- 形式:加密字符串,由 TechUI 商务发放。
- 内容:仅包含客户身份基础信息(公司名、类型、有效期、地区等)。不含具体权限配置。
- ⚙️ 配置参数密钥 (Config Key)
- 形式:加密字符串,随 Client Key 一并下发。
- 内容:包含详细的权限控制参数(项目绑定规则、子许可信息、功能开关等)。
解密步骤 (Decryption Steps)
Wasm 模块在初始化时,严格遵循以下 7 步闭环流程:
- 提取指纹:Wasm 读取传入的
Client Key,提取其中的 Key ID。 - 定位公钥:根据提取的 ID,在引入的
@techui/prime-keychain内存段中查找匹配的 Npm 密钥。 - 第一层解密:Wasm 内部算法对 Npm 密钥进行自举解密,获得解密用的“私钥种子”。
- 身份解锁:使用“私钥种子”对用户的
Client Key进行解密,验证签名合法性。 - 基础信息提取:获取许可证的基础元数据(如
company,region,expDate)。 - 第二层解密 (配置加载):结合上述所有解密结果,对 配置参数密钥 (Config Key) 进行最终解密,获取详细的控制参数(JSON 结构)。
- 终极校验:根据解密出的全量参数,结合当前运行环境(域名、时间、项目名),输出最终的
Boolean验证结果。
轻许可解密流程
适用组件:🚀 Scifi / 📊 Base / 🎛️ Admin
为了追求极致的易用性与分发效率,轻量级组件采用了单向解密机制。
核心构成 (Composition)
- 单一许可证串 (Single License String)
- 形式:一个长字符串。
- 内容:通过高强度压缩与加密,将“身份信息”与“配置参数”打包在一起。
- 如果是商业许可证的分发场景,还附带了一个子许可证密钥串。
解密步骤 (Decryption Steps)
- 主许可解密:Wasm 直接使用内置算法解密主字符串,获取当前主体的授权信息。
- 子许解密 (仅商业许可证):若检测到该许可证属于“商业许可证 (Commerce)”且包含
subLicense字段,Wasm 会获取子许可证密钥解密,验证最终客户的授权状态。 - 环境校验:对比解密出的参数(如域名绑定、有效期)与当前运行环境,判定是否放行。