专注于分布式系统架构AI辅助开发工具(Claude
Code中文周刊)

私有化部署授权系统 - 第2章:License授权体系

智谱 GLM,支持多语言、多任务推理。从写作到代码生成,从搜索到知识问答,AI 生产力的中国解法。

第2章:License授权体系

🎯 本章目标

学完这一章,你将理解:
– License文件的结构和内容
– 数字签名如何防止篡改
– License的签发和验证流程

预计学习时间: 20分钟


2.1 License是什么?

定义(初中生版)

License(许可证) = 一份数字文件,记录了客户购买的使用权限

生活类比

License就像你的驾驶证:

驾驶证 License
姓名、照片 客户名称、ID
准驾车型(C1、B2) 授权功能(基础版、高级版)
有效期(6年) 使用期限(1年、3年)
防伪标识 数字签名
交警验证 平台验证

核心作用: 证明你有权使用这个软件,以及能用哪些功能、用多久。


2.2 License文件里有什么?

完整结构图

License文件
├── 📋 元数据(文件本身的信息)
│   ├── 版本号
│   ├── 生成时间
│   └── 生成工具
│
├── 👤 客户信息
│   ├── 客户ID
│   ├── 公司名称
│   ├── 合同编号
│   └── 联系方式(加密)
│
├── ✅ 授权信息(核心部分)
│   ├── License ID
│   ├── 授权类型(试用版/正式版/企业版)
│   ├── 时间控制
│   │   ├── 签发时间
│   │   ├── 生效时间
│   │   ├── 失效时间
│   │   └── 宽限期
│   ├── 容量限制
│   │   ├── 最大机器人数
│   │   ├── 最大并发数
│   │   ├── 最大用户数
│   │   └── 最大存储空间
│   └── 功能模块
│       ├── 核心功能(基础控制、任务调度)
│       ├── 高级功能(AI优化、集群协调)
│       └── 数据功能(报表、分析、导出)
│
├── 🖥️ 部署限制
│   ├── 部署模式(私有云/混合云)
│   ├── 硬件绑定(CPU ID、MAC地址)
│   └── 网络限制(允许的IP段)
│
└── 🔒 安全签名
    ├── 签名算法(RSA-SHA256)
    ├── 签名值
    └── 证书链

关键字段详解

1. 时间控制(最重要)

时间控制:
  签发时间: 2024-01-15 10:00:00  # 厂商生成License的时间
  生效时间: 2024-02-01 00:00:00  # 客户可以开始使用的时间
  失效时间: 2025-02-01 00:00:00  # 到期时间
  宽限期: 7天                      # 过期后还能用7天(提醒续费)

生活类比:
– 签发时间 = 驾驶证打印日期
– 生效时间 = 驾驶证生效日期
– 失效时间 = 驾驶证到期日期
– 宽限期 = 到期后还能开车回家,但要尽快换证

2. 容量限制

容量限制:
  最大机器人数: 100台    # 最多接入100台机器人
  最大并发数: 50台       # 同时在线最多50台
  最大用户数: 20人       # 最多20个管理员账号
  最大存储: 1000GB      # 数据最多存1TB

为什么需要限制?
– 不同价格对应不同规模
– 防止客户超量使用
– 保护系统性能

3. 功能模块控制

功能模块:
  核心功能:
    基础控制: ✅ 开启
    任务调度: ✅ 开启
    实时监控: ✅ 开启

  高级功能:
    AI优化: ❌ 关闭      # 需要购买高级版
    多楼层管理: ❌ 关闭
    集群协调: ❌ 关闭

  数据功能:
    基础报表: ✅ 开启
    高级分析: ❌ 关闭
    数据导出: ✅ 开启
    API访问: ❌ 关闭

类比游戏版本:
– 基础版 = 免费版游戏(只能玩主线)
– 高级版 = 付费DLC(解锁新地图、新角色)
– 企业版 = 完整版(所有功能)


2.3 数字签名:防篡改的关键

问题:如果客户修改License怎么办?

假设客户拿到License文件后:

# 原始License
失效时间: 2025-02-01
最大机器人数: 100

# 客户修改后
失效时间: 2099-12-31  # 改成100年后
最大机器人数: 99999   # 改成无限台

如何防止这种情况?答案是:数字签名!

数字签名的原理(用故事讲解)

故事:古代的蜡封信

皇帝写了一封圣旨 → 用火漆封口 → 盖上玉玺
                                    ↓
                          任何人拆开信封,玉玺就会破损
                                    ↓
                          大臣收到信后,检查玉玺是否完整

数字签名就是现代版的”玉玺”!

数字签名的工作流程

第一步:厂商生成License(签名)

1. 厂商写好License内容
   
2. "私钥"对内容进行加密运算
   私钥 = 只有厂商有的密码绝对保密
   
3. 生成一串签名值像指纹一样唯一
   
4. 把License内容 + 签名值 + 公钥 打包给客户
   公钥 = 可以公开的密码用来验证签名

第二步:客户平台验证License

1. 读取License内容
   
2. "公钥"验证签名值
   
3. 判断
   - 如果签名匹配  License未被篡改 
   - 如果签名不匹配  License被修改过  拒绝启动

形象比喻

私钥 = 你的签名笔迹(只有你能写出来)
公钥 = 笔迹鉴定标准(任何人都能用来验证)
签名值 = 你的签名(独一无二)

如果有人修改了文件内容,签名就对不上了!

代码示例(简化版)

# 厂商端:生成License并签名
def generate_license(customer_info):
    # 1. 准备License内容
    license_data = {
        "customer_id": "CUST-2024-001",
        "valid_until": "2025-02-01",
        "max_robots": 100
    }

    # 2. 用私钥签名(私钥保密,只有厂商有)
    signature = sign_with_private_key(license_data, private_key)

    # 3. 打包
    license_package = {
        "data": license_data,      # License内容
        "signature": signature,    # 签名值
        "public_key": public_key   # 公钥(给客户验证用)
    }

    return license_package

# 客户端:验证License
def verify_license(license_package):
    # 1. 提取内容
    data = license_package["data"]
    signature = license_package["signature"]
    public_key = license_package["public_key"]

    # 2. 用公钥验证签名
    is_valid = verify_signature(data, signature, public_key)

    if is_valid:
        print("✅ License验证成功,未被篡改")
        return True
    else:
        print("❌ License验证失败,可能被修改过")
        return False

2.4 License的生命周期

完整流程图

[阶段1:商务签约]
客户购买授权 → 签订合同 → 确定授权参数
                              
[阶段2:License签发]
销售提交申请 → 技术审核 → 配置参数 → 生成License → 数字签名
                              
[阶段3:交付客户]
发送License文件(通过邮件/U盘)
                              
[阶段4:客户激活]
客户导入License → 平台验证签名 → 验证通过 → 记录激活时间
                              
[阶段5:日常使用]
平台定期检查License(每天一次)
├── 检查是否过期
├── 检查设备数量是否超限
└── 检查功能是否授权
                              
[阶段6:到期续费]
提前30天预警 → 客户续费 → 生成新License → 导入更新

关键时间节点

时间点 动作 说明
T-30天 发送续费提醒 提前通知客户
T-7天 发送紧急提醒 即将到期
T日 License到期 进入宽限期
T+7天 宽限期结束 停止服务

2.5 License验证的判断逻辑

验证检查表

平台启动时,会依次检查以下项目:

检查项 检查内容 通过条件 失败后果
1. 文件完整性 License文件是否存在 文件存在且可读 拒绝启动
2. 签名验证 数字签名是否匹配 签名正确 拒绝启动
3. 时间有效性 是否在有效期内 当前时间 < 失效时间 进入宽限期/停止
4. 硬件匹配 服务器硬件是否匹配 硬件指纹匹配 要求重新授权
5. 容量检查 设备数量是否超限 当前数量 ≤ 授权数量 拒绝新设备接入
6. 功能检查 使用的功能是否授权 功能已授权 功能禁用

验证代码示例

def validate_license(license_file):
    """
    验证License的完整流程
    """

    # 检查1:文件是否存在
    if not os.path.exists(license_file):
        return "FAIL", "License文件不存在"

    # 检查2:验证签名
    license_data = load_license(license_file)
    if not verify_signature(license_data):
        return "FAIL", "License签名验证失败,可能被篡改"

    # 检查3:验证时间
    current_time = get_current_time()
    valid_until = license_data["valid_until"]
    grace_period = license_data["grace_period_days"]

    if current_time > valid_until + grace_period * 86400:
        return "EXPIRED", "License已过期"
    elif current_time > valid_until:
        return "GRACE_PERIOD", f"License已过期,宽限期剩余{grace_period}天"

    # 检查4:验证硬件绑定
    if license_data["hardware_binding"]["enabled"]:
        if not check_hardware_match(license_data):
            return "FAIL", "硬件不匹配,请联系厂商"

    # 检查5:验证容量
    current_robot_count = get_robot_count()
    max_robots = license_data["max_robots"]
    if current_robot_count > max_robots:
        return "OVER_LIMIT", f"设备数量超限({current_robot_count}/{max_robots})"

    # 所有检查通过
    return "VALID", "License验证成功"

2.6 硬件绑定:防止License被复制

问题:如果客户把License复制给别人怎么办?

客户A购买了License → 复制给客户B → 客户B也能用

解决方案:硬件绑定

硬件绑定的原理

核心思想: 把License和客户的服务器硬件”绑定”在一起

生成License时:
1. 收集客户服务器的硬件信息
   - CPU序列号
   - 网卡MAC地址
   - 硬盘序列号
   - 主板序列号

2. 生成"硬件指纹"(把这些信息混合计算)
   硬件指纹 = SHA256(CPU + MAC + 硬盘 + 主板)

3. 把硬件指纹写入License

验证License时:
1. 读取当前服务器的硬件信息
2. 计算当前硬件指纹
3. 对比License中的硬件指纹
   - 如果匹配 → 是同一台服务器 ✅
   - 如果不匹配 → 服务器被更换了 ❌

灵活性设计

问题: 如果客户的服务器坏了,换了新服务器怎么办?

解决方案: 灵活绑定模式

硬件绑定策略:
  模式: FLEXIBLE  # 灵活模式

  匹配规则:
    - 至少匹配3项硬件信息
    - 允许更换1-2个硬件组件

  变更控制:
    最大变更次数: 2次/年    # 一年最多换2次硬件
    需要审批: true          # 变更需要厂商审批

2.7 License类型对比

三种常见类型

类型 试用版 正式版 企业版
有效期 30天 1年 3年
设备数量 10台 100台 不限
功能 仅基础功能 基础+部分高级 全部功能
技术支持 工作日支持 7×24小时
价格 免费 10万/年 50万/3年
硬件绑定
可续费

2.8 本章小结

核心要点

  1. License = 数字化的使用许可证,记录了客户的使用权限
  2. 数字签名 = 防篡改的关键技术,任何修改都会被检测到
  3. 硬件绑定 = 防止License被复制,绑定到特定服务器
  4. 验证流程 = 多层检查,确保License合法有效

类比总结

License = 驾驶证
数字签名 = 防伪标识
硬件绑定 = 人脸识别(证明是你本人)
验证流程 = 交警查证(检查各项信息)

License的核心作用

┌─────────────────────────────────┐
│         License的作用            │
├─────────────────────────────────┤
│ ✅ 控制使用期限(防止永久使用)   │
│ ✅ 控制功能范围(防止越权使用)   │
│ ✅ 控制使用规模(防止超量使用)   │
│ ✅ 防止篡改(数字签名)          │
│ ✅ 防止复制(硬件绑定)          │
└─────────────────────────────────┘

🤔 思考题

  1. 理解题:为什么需要”公钥”和”私钥”两把钥匙?只用一把不行吗?

  2. 场景题:如果客户的服务器硬盘坏了,换了新硬盘,License还能用吗?应该怎么处理?

  3. 挑战题:如果客户修改了系统时间,把时间调回到License有效期内,能绕过验证吗?(提示:下一章会讲解决方案)


📚 下一章预告

第3章我们将学习设备密钥体系
– 设备密钥和License有什么区别?
– 每个机器人如何拥有自己的”身份证”?
– 密钥的种类和用途是什么?

继续加油!


本章关键词
– License(许可证)
– 数字签名
– 公钥/私钥
– 硬件绑定
– 硬件指纹
– 时间控制
– 容量限制
– 功能授权

赞(0)
未经允许不得转载:Toy Tech Blog » 私有化部署授权系统 - 第2章:License授权体系
免费、开放、可编程的智能路由方案,让你的服务随时随地在线。

评论 抢沙发

十年稳如初 — LocVPS,用时间证明实力

10+ 年老牌云主机服务商,全球机房覆盖,性能稳定、价格厚道。

老品牌,更懂稳定的价值你的第一台云服务器,从 LocVPS 开始