7.0 KiB
7.0 KiB
授权文件生成功能实现总结
📋 已完成的工作
1. 数据库扩展 ✅
修改的文件: src/lib/db.ts
新增字段 (licenses表):
config_id- 关联的配置文件IDdevice_sn- 设备SN(支持设备级授权)license_file- 存储生成的JSON授权文件created_at- 创建时间updated_at- 更新时间
新增表:
license_download_logs- 记录授权文件下载日志license_templates- 授权模板表(预留)
新增工具函数:
generateLicenseFile()- 生成授权文件JSONverifyLicenseSignature()- 验证授权文件签名
2. API接口实现 ✅
A. 授权管理API (src/app/api/licenses/route.ts)
GET /api/licenses
- 获取所有授权列表
- 返回包含license_file字段的完整信息
POST /api/licenses
- 创建新授权
- 自动生成JSON授权文件
- 支持指定配置文件或自动匹配最新配置
PUT /api/licenses
- 更新授权信息
- 重新生成授权文件JSON
- 支持部分字段更新
B. 手机APP下载接口 (src/app/api/licenses/download/route.ts) ⭐
GET /api/licenses/download?sn={device_sn}
核心功能:
- 根据设备SN查找对应的授权
- 优先匹配设备级授权,其次型号级授权
- 只返回"生效"且未过期的授权
- 自动记录下载日志(IP、时间、APP版本)
- 如果授权文件未生成,实时生成并保存
- 返回完整的JSON格式授权文件
错误处理:
- 设备不存在 → 404
- 无有效授权 → 404 + 提示信息
C. 授权预览接口 (src/app/api/licenses/[id]/preview/route.ts)
GET /api/licenses/{id}/preview
- 预览指定授权的JSON内容
- 用于管理后台查看授权文件详情
3. 前端界面增强 ✅
修改的文件: src/app/licenses/page.tsx
新增功能:
- 预览按钮 - 点击可查看授权文件JSON内容
- 下载按钮 - 直接下载JSON文件到本地
- 预览弹窗 - 美观的JSON展示界面,支持格式化显示
- 状态更新 - LicenseItem接口增加license_file字段
UI改进:
- 操作列改为多按钮布局(预览、下载、编辑)
- 添加FileJson和Eye图标
- 预览弹窗支持全屏查看和下载
4. 文档完善 ✅
新增文档:
-
API_LICENSE.md - 完整的API使用文档
- 接口详细说明
- 请求/响应示例
- JSON结构定义
- 安全特性说明
- 调用示例代码
-
TEST_LICENSE.md - 详细的测试指南
- 测试步骤说明
- curl命令示例
- 错误场景测试
- 签名验证代码
- 常见问题解答
- 性能优化建议
🎯 核心特性
1. 双重授权模式
- 型号级授权: 同一型号的所有设备共享
- 设备级授权: 针对特定设备的独立授权
- 下载时自动优先匹配设备级授权
2. 智能配置匹配
- 可手动指定配置文件ID
- 未指定时自动使用最新生效配置
- 支持跨型号配置继承
3. 数字签名保护
- 每个授权文件包含SHA256签名
- APP端可验证文件完整性
- 防止授权文件被篡改
4. 完整的审计日志
- 记录每次下载的详细信息
- 包括设备SN、时间、IP、APP版本
- 便于追踪和分析使用情况
5. 懒加载生成策略
- 首次创建时生成并缓存
- 更新时自动重新生成
- 避免重复计算,提升性能
📊 授权文件JSON结构
{
"version": "1.0",
"generatedAt": "ISO时间戳",
"deviceModel": "GD-30 Supreme",
"deviceSN": "GD30-20260430-001",
"validUntil": "2027-04-30",
"status": "active",
"authModules": [
{
"id": "1D",
"name": "一维自电/电阻率/激电测试模块",
"category": "一维",
"enabled": true
}
],
"config": {
"name": "CFG-GD30-v2.1",
"version": "v2.1",
"emissionParams": {...},
"acquisitionParams": {...},
"networkParams": {...}
},
"signature": {
"algorithm": "SHA256",
"value": "a1b2c3d4...",
"publicKey": "platform-public-key-placeholder"
}
}
🔧 技术实现细节
数据库迁移
- 使用ALTER TABLE动态添加字段
- 自动检测并应用迁移
- 向后兼容,不影响现有数据
签名算法
const jsonString = JSON.stringify(licenseData, null, 2)
const signature = crypto.createHash('sha256')
.update(jsonString)
.digest('hex')
查找逻辑优先级
1. device_sn 精确匹配(设备级授权)
2. model 匹配 + status='生效' + expiry >= now(型号级授权)
3. 按id DESC排序取第一条(最新授权)
下载日志记录
INSERT INTO license_download_logs
(license_id, device_sn, download_time, ip_address, app_version)
VALUES
(?, ?, ?, ?, ?)
🚀 使用方法
管理员操作流程
- 在"配置文件管理"创建设备配置
- 在"授权管理"选择型号、授权项、配置
- 系统自动生成JSON授权文件
- 可预览或下载授权文件
手机APP调用流程
// APP启动时获取授权
const response = await fetch(
`/api/licenses/download?sn=${deviceSN}`
);
if (response.ok) {
const license = await response.json();
// 验证签名
if (verifySignature(license)) {
// 启用对应功能模块
enableModules(license.authModules);
// 应用配置参数
applyConfig(license.config);
}
}
📝 文件清单
后端文件
- ✅
src/lib/db.ts- 数据库扩展和工具函数 - ✅
src/app/api/licenses/route.ts- 授权管理API - ✅
src/app/api/licenses/download/route.ts- 下载接口(新建) - ✅
src/app/api/licenses/[id]/preview/route.ts- 预览接口(新建)
前端文件
- ✅
src/app/licenses/page.tsx- 授权管理页面增强
文档文件
- ✅
API_LICENSE.md- API使用文档(新建) - ✅
TEST_LICENSE.md- 测试指南(新建)
✨ 亮点功能
- 一键生成 - 保存授权时自动生成JSON文件
- 智能匹配 - 自动关联最新配置文件
- 双重授权 - 支持设备级和型号级两种模式
- 完整日志 - 记录每次下载行为
- 签名验证 - 确保文件安全性
- 友好界面 - 可视化预览和下载功能
- 详细文档 - 完整的API文档和测试指南
🔄 后续优化建议
短期优化
- 在设备详情页显示授权状态
- 添加授权到期提醒功能
- 实现批量导出授权文件
中期优化
- 实现真实的RSA数字签名
- 添加授权文件加密传输
- 实现授权模板功能
长期规划
- 授权使用统计分析
- 异常下载行为检测
- 授权文件版本控制
- CDN缓存加速
🎉 总结
本次实现完成了授权文件生成和下载的核心功能,包括:
- ✅ 完整的数据库设计
- ✅ 4个API接口
- ✅ 前端界面增强
- ✅ 详细的使用文档
- ✅ 完整的测试指南
手机APP现在可以通过简单的HTTP请求获取设备对应的授权文件,实现了平台与移动端的无缝对接。系统设计考虑了安全性、性能和可扩展性,为后续的迭代升级奠定了良好基础。