Skip to main content

授权验证 SDK - 用于验证应用授权状态

Project description

Licence SDK Python

授权验证 SDK,用于验证 Python 应用授权状态。

安全设计

此 SDK 使用 RSA-SHA256 非对称加密进行签名验证:

  • 私钥:仅存在于授权服务中,用于签名
  • 公钥:硬编码在此 SDK 中,用于验证签名

即使公钥被公开,也无法伪造有效的授权签名。

安装

使用 uv 安装(推荐)

uv add licence-sdk-python

使用 pip 安装

pip install licence-sdk-python

从本地构建安装

cd licence-sdk-python

# 1. 安装依赖
uv sync --all-extras

# 2. 构建混淆包
./scripts/build.sh

# 3. 安装
pip install dist/licence_sdk_python-*.whl

初始化

1. 配置公钥

将授权服务的 RSA 公钥配置到 src/licence_sdk_python/public_key.py

LICENCE_PUBLIC_KEY = "你的Base64编码的RSA公钥"

2. 配置授权服务

确保 C++ 授权服务已启动并配置了对应的私钥。

使用方法

基础授权检查

import os
import asyncio
from licence_sdk_python import check_licence, is_licenced

async def main():
    # 异步检查授权
    result = await check_licence(
        os.environ.get("LICENCE_KEY", ""),
        "http://localhost:18080"
    )
    
    print("授权有效" if result.valid else "授权无效")
    
    # 同步获取状态(需要先调用 check_licence)
    if is_licenced():
        # 执行需要授权的操作
        pass

asyncio.run(main())

同步版本

import os
from licence_sdk_python import check_licence_sync, is_licenced

# 同步检查授权
result = check_licence_sync(
    os.environ.get("LICENCE_KEY", ""),
    "http://localhost:18080"
)

if result.valid:
    print("授权有效")

获取机器码

from licence_sdk_python import get_fingerprint_sync, check_service_health_sync

# 检查授权服务是否可用
if not check_service_health_sync("http://localhost:18080"):
    print("授权服务不可用")
else:
    # 获取机器码
    result = get_fingerprint_sync("http://localhost:18080")
    if result.success:
        print(f"机器码: {result.fingerprint}")
    else:
        print(f"获取失败: {result.error}")

保护函数

from licence_sdk_python import licence_required, licence_required_async

# 同步函数保护
@licence_required
def protected_function():
    # 未授权时抛出 PermissionError
    print("执行受保护的操作")

# 异步函数保护
@licence_required_async
async def protected_async_function():
    # 未授权时抛出 PermissionError
    print("执行受保护的异步操作")

数据过滤

from licence_sdk_python import filter_data, is_feature_enabled

# 未授权时限制数据量
all_devices = [...]  # 假设有 100 条数据
devices = filter_data(all_devices, limit=3)
# 未授权时只返回前 3 条

# 检查功能是否可用
if not is_feature_enabled("smart-records"):
    print("此功能需要授权")

API 参考

核心函数

函数 说明
check_licence(key, url) 异步检查授权状态
check_licence_sync(key, url) 同步检查授权状态
is_licenced() 同步获取缓存的授权状态
get_licence_state() 获取授权状态详情
clear_licence_cache() 清除授权缓存
set_licence_state(state) 设置授权状态

机器码/设备指纹

函数 说明
get_fingerprint(url) 异步获取设备指纹码
get_fingerprint_sync(url) 同步获取设备指纹码
check_service_health(url) 异步检查授权服务是否可用
check_service_health_sync(url) 同步检查授权服务是否可用
get_service_version(url) 异步获取授权服务版本
get_service_version_sync(url) 同步获取授权服务版本

数据过滤

函数 说明
filter_data(data, limit) 未授权时限制数据量
is_feature_enabled(feature) 检查功能是否可用
get_data_limit_info(total) 获取数据限制信息
set_free_features(features) 设置免费功能列表
set_default_data_limit(limit) 设置默认数据限制

API 保护装饰器

装饰器 说明
licence_required 同步函数装饰器,未授权抛出 PermissionError
licence_required_async 异步函数装饰器,未授权抛出 PermissionError

类型定义

类型 说明
LicenceResult 授权检查结果
LicenceState 授权状态缓存
FingerprintResult 机器码获取结果
DataLimitInfo 数据限制信息

授权服务 API 格式

授权服务需要返回以下格式的响应:

{
  "code": 200,
  "message": "Licence is valid",
  "data": {
    "status": "valid",
    "valid": true,
    "timestamp": 1735344000,
    "signature": "base64_rsa_sha256_signature..."
  }
}

签名内容格式:{licence}|{status}|{timestamp}

开发与构建

1. 安装开发依赖

cd licence-sdk-python
uv sync --all-extras

这会安装:

  • 核心依赖:cryptography, httpx
  • 开发工具:pytest, pytest-asyncio, pyarmor

2. 运行测试

uv run pytest

3. 构建与打包

方式一:混淆构建(默认推荐)

使用 PyArmor 混淆代码后构建,保护源代码:

# 使用构建脚本(推荐)
./scripts/build.sh

# 或使用 Python 脚本
uv run python scripts/build_package.py

关于 PyArmor:

  • ✅ 使用基础混淆模式,免费版可用
  • 🔒 提供基本的代码保护
  • 💡 保护核心授权验证逻辑

方式二:标准构建(不混淆)

适合开发测试:

# 跳过混淆
./scripts/build.sh --no-obfuscate

# 或直接使用 uv
uv build

打包流程说明:

[1/5] 创建临时构建目录
      ↓ 创建 build_temp/ 目录

[2/5] 复制项目文件
      ↓ 复制 src/, pyproject.toml, README.md 到临时目录

[3/5] 代码处理
      ↓ 标准模式:保持原样
      ↓ 混淆模式:使用 PyArmor 混淆(需许可证)

[4/5] 构建 wheel 包
      ↓ 生成 .whl 和 .tar.gz 文件到 dist/ 目录

[5/5] 清理临时文件
      ↓ 删除 build_temp/ 目录
      ✓ 完成!原始源代码保持不变

生成的文件:

  • dist/licence_sdk_python-1.0.0-py3-none-any.whl - Wheel 包(混淆后)
  • dist/licence_sdk_python-1.0.0.tar.gz - 源码包(混淆后)

4. 本地测试安装

# 使用 pip 安装
pip install dist/licence_sdk_python-*.whl

# 或使用 uv
uv add dist/licence_sdk_python-*.whl

# 测试导入
python -c "from licence_sdk_python import check_licence; print('安装成功!')"

环境变量

变量 说明
LICENCE_KEY 授权码
LICENCE_SERVICE_URL 授权服务地址
PYTHON_ENV 设为 development 启用开发模式
LICENCE_DEV_MODE 设为 true 跳过授权检查

日志

SDK 使用 Python 标准 logging 模块,logger 名称为 licence_sdk

import logging

# 启用调试日志
logging.getLogger("licence_sdk").setLevel(logging.DEBUG)

许可证

UNLICENSED - 私有软件

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

licence_sdk_python-1.0.0-py3-none-any.whl (310.6 kB view details)

Uploaded Python 3

File details

Details for the file licence_sdk_python-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: licence_sdk_python-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 310.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for licence_sdk_python-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6e4b8e42adf175d39d4477bb117c7b9acb1d363df0a97700bf73ec2a18de87f9
MD5 54d0410491e5ffd97be2dd11accd5505
BLAKE2b-256 15c38dd11b724f30d1ba9cbf0e6370084e32b4f8a8927d057a38f7fc8cddc2c3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page