Python SDK for cedar-v License Manager
Project description
License Manager SDK (Python)
license-manager-sdk-python 是 License Manager 系列授权管控中枢的官方 Python 客户端。它与后端的 SaaS 管控网络无缝集成,专门为 B端/G端 软件、算法模型落地以及各种私有化部署提供从在线激活到离线侧载、从机器指纹绑定到后台心跳封禁的全套授权治理能力。
🌟 核心能力架构
本 SDK 提供多层防御机制和灵活的商业策略触点:
- 🛡️ 强硬件指纹锁定:全平台自动抓取
MAC,CPU,Hostname甚至自定义特征生成唯一指纹,实现真正的“一机一码”,阻断跨设备白嫖。 - 🔒 数据强防篡改 (RSA-PSS + AES):网络传输与本地落地的
license.lic均由不可逆的非对称 RSA 私钥重签名,本地持久化缓存以动态 Nonce + AES-GCM 加密,彻底杜绝本地抓包与反汇编篡改证书。 - 🔌 混合鉴权 (Online First & Offline Fallback):
- 在线模式:输入一串极简的产品激活码,设备主动向 SaaS 面板请求注册激活,后台自动派发许可并建立心跳档案。
- 离线侧载 (
&魔法):对于军工/内网纯断网环境,支持用户将授权码与被网闸外的终端代签的Base64离线封套组合为AuthCode&Envelope格式喂给 SDK,自动实现物理隔离区的脱机秒激活验证。
- 💓 云端“遥控”心跳系统:底层常驻心跳守护线程。无论何时在 SaaS 控制台点击“禁用”、“退款解绑”或“过期”,客户端下一秒的
Heartbeat立即获取并触发死亡回调,瞬时阻断正在运行的业务。
📦 快速接入指南
1. 基础依赖
本 SDK 坚持最小极简原则,除标准库外,仅需依赖:
pip install requests cryptography
2. 初始化与使用
以下是如何在您的 Python 业务代码中无侵入式植入防线的示例:
import time
import logging
from license_manager.client import Client, ClientOptions, Callbacks
from license_manager.config import Config
from license_manager.models import LicensePayload
def main():
# 1. 配置您的 SaaS 网关与应用身份
cfg = Config(
server="http://43.136.177.43:18081",
product="vision-vm-studio", # 您在 SaaS 后台创建的产品标识
version="1.0.0", # 软件版本(可作升级校验控制)
authorization_code="YOUR_AUTH_CODE", # 客户输入的授权码(可带&脱机包)
hardware_fields=["cpu", "hostname", "mac"],
license_file_path="license.lic", # 授权本地落地缓存
public_key_pem=b"-----BEGIN PUBLIC KEY-----\n..." # 从后台获取的公钥PEM串
)
# 2. 注入业务阻断/状态同步回调钩子
def on_license_updated(lic: LicensePayload):
logging.info(f"-> 收到新证书!将于 {lic.expires_at} 过期")
def on_heartbeat_error(err: Exception):
logging.warning(f"-> 心跳预警/暂无法连接服务器: {err}")
# 如果 err 中包含 300006,意味着不仅是断网,而是您在后台强行吊销了该证
if "300006" in str(err):
logging.error("业务级致盲:授权已被吊销或清理!")
def on_activation_required(reason: str):
logging.error(f"-> 致命剥权: {reason}")
# 在此处调用 sys.exit() 或者杀除核心算法句柄
# 3. 拉起防线
callbacks = Callbacks(
on_license_updated=on_license_updated,
on_heartbeat_error=on_heartbeat_error,
on_activation_required=on_activation_required,
on_heartbeat_ping=lambda: logging.info("Ping...")
)
try:
# SDK 启动时会自动根据情况:尝试载入本地有效证 -> 发起在线激活请求 -> 降级解密离线包套 -> 启动轮询
client = Client(cfg, ClientOptions(callbacks=callbacks))
except Exception as e:
logging.error(f"授权初始化崩溃: {e}")
return
# 4. 经过上一步的洗礼,此时必定有合规的证
lic = client.current_license()
logging.info(f"授权成功并生效,企业标识: {lic.license_key}")
# +++ 以下为您的核心商业逻辑 +++
# ...
# 每次跑巨幅算力前均可调用安全验证:
client.validate()
# 优雅退出
client.close()
if __name__ == "__main__":
main()
🛠️ API 模块详述
license_manager.config.Config: SDK 的基石配置,负责定义产品身份、硬件采样维度和公钥验签证书。license_manager.client.Client: 主控 Facade。您只需持有它的实例即可。license_manager.hardware.DefaultHardwareProvider: 跨平台设备指纹提取器,默认支持mac,cpu,hostname,disk等硬件特征的稳定提取与加密散列化。license_manager.heartbeat.HeartbeatManager: 藏在底层的定时器,会按照Config或服务端下发的动态间隔,不断向后台上报指纹请求对齐LicensePayload履历。
💡 示例应用 (Examples)
SDK 内置了两个详尽的参考案例:
examples/basic/main.py: 无依赖的纯终端 SDK 接入演示。examples/客户案例1/client-demo/demo.py: 基于Tkinter的高度还原 GUI 客户端 Demo,展示了极其直观的离线载入、在线阻断日志以及动态修改 SaaS 地址的商业端防线体验。您可以直接运行或使用 PyInstaller 打包为exe。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cedarv_license_manager_sdk-1.0.0.tar.gz.
File metadata
- Download URL: cedarv_license_manager_sdk-1.0.0.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53e00b99a880f73672f3e2f7415940ed5ce6073c0193f56bcc0d9e233bc49161
|
|
| MD5 |
7df2733e424e930b33458bd428fe6f92
|
|
| BLAKE2b-256 |
2c046a8e7b1111806567f9495a989b6e6a26d11d5c913e275207eaf95005b3e8
|
File details
Details for the file cedarv_license_manager_sdk-1.0.0-py3-none-any.whl.
File metadata
- Download URL: cedarv_license_manager_sdk-1.0.0-py3-none-any.whl
- Upload date:
- Size: 4.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26ecfefda8b986082753d86b121a444c5e9a0f9326a6eec1e81abae32828556a
|
|
| MD5 |
60b5a3ca2902d5bfc0dfe27145ba9620
|
|
| BLAKE2b-256 |
861997e10d4fa19949a748d69aca58fd32aa38bc9ce9bc583548f8ee16ee4d42
|