3.9 KiB
3.9 KiB
产品激活码解析与使用说明
本文档面向客户端开发人员,旨在说明 SaaS 平台发放给最终用户的“产品激活码”的数据结构及其在 SDK 中的鉴权原理。
什么是产品激活码?
用户在 SaaS 管理端购买或获取的凭证通常被称为**“产品激活码” (Product Activation Code)**。
为了满足工业场景中纯离线/脱机的鉴权需求,平台生成的产品激活码不仅仅是一个简单的随机字符串,它实际上是一个复合字符串,包含了在线激活所需的凭证以及离线放行所需的鉴权信息。
数据结构原理
产品激活码使用 & 符号作为分隔符,分为两部分:
[授权码 (Authorization Code)] & [离线鉴权信息 (License Envelope Base64)]
示例解析
假设用户输入了以下产品激活码:
LIC-207E-tEOWEY54X3tL-zSAA&eyJhbGdv... (后略)
-
&之前的部分:授权码 (Authorization Code)- 内容:
LIC-207E-tEOWEY54X3tL-zSAA - 作用: 这是用于在线激活的凭证。当终端设备处于联网状态时,客户端 SDK 的
Activate接口会使用此字符串向服务端发起请求。服务端会进行校验,扣减装机配额,并与该机器的硬件指纹进行绑定,最终全自动下发专属于这台机器的许可证文件。
- 内容:
-
&之后的部分:鉴权信息 (Authentication Information)- 内容:
eyJhbGdv...(这是一个经过 Base64 编码的 JSON 字符串,即License Envelope) - 作用: 这是用于离线验证的凭证包。当终端设备处于完全无网/隔离部署的状态,无法连接到远程 SaaS 平台完成激活时,这就是客户端的“越权通行证”。这个 Base64 结构内部包含了被服务端 RSA 私钥数字签名过的数据(如过期时间、最高并发台数等配额信息)。
- 内容:
客户端接入与解析伪代码
客户端开发者在获取到用户框输入的“产品激活码”时,只需要做一个简单的字符串分割处理,将其分离为在线激活部分和离线兜底部分,再交给 SDK。
import base64
import os
from license_manager.client import Client, ClientOptions
from license_manager.config import Config
# 这是用户填入的产品激活码
product_activation_code = "LIC-xxxx&eyJhbGdo..."
# 默认将其视作 Auth_Code
auth_code = product_activation_code
offline_auth_data = None
# 【第一步:解析分离】判断是否存在离线鉴权信息
if "&" in product_activation_code:
parts = product_activation_code.split("&", 1)
auth_code = parts[0] # 真正的在线授权码
offline_auth_data = parts[1] # 离线鉴权数据 (Envelope)
cfg = Config(
server="https://xxx.com",
product="you_product",
version="1.0.0",
authorization_code=auth_code, # 将分离出的 Auth_Code 交给 SDK
)
# 【第二步:离线侧载】如果存在离线数据,且本地尚无合法的证书,直接将其落地
if offline_auth_data:
# 直接将 SaaS 发放的公版离线鉴权包保存到目标证书路径
# SDK 初始化时会自动读取、验签、生效,从而实现"物理断网"状态下的秒级试用体验
with open(cfg.license_file_path, "wb") as f:
f.write(base64.b64decode(offline_auth_data))
# 【第三步:启动 SDK】
# SDK 会自动优先寻找本地证书(即我们刚刚侧载进去的离线鉴权信息)
# 若本地校验合法将直接启动;若机器具备网络环境,自带的 Heartbeat 还会自动联网嗅探对齐状态!
client_facade = Client(cfg, opts=ClientOptions(...))
运行机制总结
这种 授权码 & 鉴权信息 的二合一产品激活码设计,极大降低了对用户的解释成本。用户只需复制这一个字符串,无论他们身处有网络的办公室还是物理隔离的车间产线,开发者开发的软件结合 License SDK 都可以做到“离线直接跑、在线强管控”。