本地许可证校验
客户端激活成功后,应优先依赖本地许可证完成启动校验。即使是在线或混合模式,也不建议把每次启动都设计成强实时联网鉴权。
客户端需要保存什么
首次激活成功后,至少保存:
| 内容 | 说明 |
|---|---|
license_file | Base64 编码的许可证文件 |
| 产品公钥 | 首次在线响应中与许可证配对保存,或纯离线交付时与许可证一同导入的 RSA 公钥 |
启用心跳时还需要保存:
| 内容 | 说明 |
|---|---|
license_key | 心跳接口使用的许可证密钥 |
heartbeat_interval | 建议心跳间隔 |
校验顺序
关键校验项
| 校验项 | 处理建议 |
|---|---|
| 签名 | 必须先验签,再读取业务授权内容 |
| 状态 | 只有 active 才能放行;revoked、空值和未知状态必须阻断,过期由有效期字段判断 |
| 有效期 | 检查当前时间是否在授权期内 |
| 硬件指纹 | 当前设备指纹应与许可证中的指纹一致 |
| 功能配置 | 根据 feature_config 控制模块开关 |
| 使用限制 | 根据 usage_limits 控制数量、额度或频率 |
| 自定义参数 | 根据 custom_parameters 映射业务参数 |
公钥与许可证关系
同一产品新签发的许可证使用同一产品公钥验签。首次在线获取时使用响应中的公钥并与许可证配对保存;心跳和后续启动使用已保存公钥;纯离线时二者同批导入。完整信任模型见 许可证结构与验证。
常见失败
| 现象 | 可能原因 |
|---|---|
| 签名验证失败 | 公钥与许可证不属于同一产品、许可证损坏、验签前重新序列化了 data |
| 授权已过期 | 本地时间超过许可证 end_date |
| 设备不匹配 | 当前硬件指纹和许可证绑定指纹不一致 |
| 功能不可用 | feature_config 未包含该功能,或使用额度已达上限 |