Paper-Dragon

2026/1/5...大约 2 分钟


Python软件授权

项目地址https://github.com/Paper-Dragon/py-auth

Python 软件授权管理系统,支持设备授权验证、AES加密传输、本地缓存、Web管理界面。

服务端部署

Docker Compose 部署

实际使用中,我直接使用 SQLite 数据库,更简单方便,不需要单独部署 MySQL。

docker-compose.yaml 配置:

version: '3.8'

services:
  auth-service:
    image: jockerdragon/py-auth-service
    build: .
    container_name: auth-service
    environment:
      DATABASE_TYPE: sqlite
      SQLITE_PATH: /app/data/auth.db
      CLIENT_SECRET: aB3cD5eF7gH9iJ1kL3mN5oP7qR9sT1uV3wX5yZ7aB9cD1eF3gH5iJ7kL9mN1oP3qR5sT7uV9wX1yZ3
      SECRET_KEY: M2nP4qR6sT8uV0wX2yZ4aB6cD8eF0gH2iJ4kL6mN8oP0qR2sT4uV6wX8yZ0aB2cD4eF6gH8iJ0
      ACCESS_TOKEN_EXPIRE_MINUTES: 1440
      ADMIN_USERNAME: admin
      ADMIN_PASSWORD: admin123
    ports:
      - "8000:8000"
    volumes:
      - auth_data:/app/data
    restart: unless-stopped

volumes:
  auth_data:

启动服务:

git clone https://github.com/Paper-Dragon/py-auth.git
cd py-auth
docker compose up -d

访问地址:

  • Web管理界面:http://localhost:8000(账户:admin / admin123
  • API文档:http://localhost:8000/docs

查看日志:

docker compose logs -f auth-service

注意事项:

  • 生产环境请修改 CLIENT_SECRETSECRET_KEYADMIN_PASSWORD 为强密码
  • 数据存储在 Docker volume auth_data 中,删除容器不会丢失数据
  • 如果需要使用 MySQL,可以参考项目中的 env.example 配置

客户端SDK使用

安装

客户端SDK托管在私有PyPI仓库:

pip install py-auth-client --extra-index-url https://www.geekery.cn/pip/simple/

包索引地址https://www.geekery.cn/pip/simple/py-auth-client/index.html

基本使用

参考项目中的 client/example.py

from py_auth_client import AuthClient, AuthorizationError

# 初始化客户端
client = AuthClient(
    server_url="http://localhost:8000",
    software_name="我的软件",
    client_secret="aB3cD5eF7gH9iJ1kL3mN5oP7qR9sT1uV3wX5yZ7aB9cD1eF3gH5iJ7kL9mN1oP3qR5sT7uV9wX1yZ3",
    # debug=True  # 开启调试日志,便于排查网络/缓存状态
)

# 检查授权
try:
    client.require_authorization()
    print("✅ 设备已授权")
except AuthorizationError as e:
    print(f"❌ 授权失败: {e}")
    exit(1)

# 获取授权信息
print(client.get_authorization_info())

重要配置说明

必需参数:

  • server_url: 授权服务器地址(注意协议和端口)
  • client_secret: 客户端密钥(必须与服务端完全一致,否则会验证失败)

可选参数:

  • device_id: 设备ID(不提供则自动生成,基于硬件信息)
  • software_name: 软件名称(用于在管理界面显示)
  • debug: 开启调试日志(默认False,排查问题时很有用)

缓存机制说明

实际使用中的缓存策略:

  • 缓存有效期:7天
  • 验证流程:始终向服务端发送请求并更新本地缓存
  • 离线支持:网络失败时,在有效期内使用缓存作为后备
  • 缓存位置:系统隐藏目录,经过混淆加密

注意事项:

  • 如果服务端拒绝授权,即使有缓存也会失败
  • 缓存主要用于网络故障时的容错,不是绕过验证的手段
  • 可以通过 debug=True 查看缓存状态和网络请求情况

常见问题

  1. 授权失败:密钥不匹配

    • 检查客户端和服务端的 CLIENT_SECRET 是否完全一致
    • 注意不要有多余的空格或换行
  2. 网络连接失败

    • 检查 server_url 是否正确
    • 检查服务端是否正常运行
    • 开启 debug=True 查看详细错误信息
  3. 设备ID变化

    • 设备ID基于硬件信息自动生成
    • 更换硬件可能导致设备ID变化,需要在管理界面重新授权

更新日志

  • 7011b-Add py_auth_client version 0.1.2 packages and update documentation