Python软件授权
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_SECRET、SECRET_KEY和ADMIN_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查看缓存状态和网络请求情况
常见问题
授权失败:密钥不匹配
- 检查客户端和服务端的
CLIENT_SECRET是否完全一致 - 注意不要有多余的空格或换行
- 检查客户端和服务端的
网络连接失败
- 检查
server_url是否正确 - 检查服务端是否正常运行
- 开启
debug=True查看详细错误信息
- 检查
设备ID变化
- 设备ID基于硬件信息自动生成
- 更换硬件可能导致设备ID变化,需要在管理界面重新授权
更新日志
2026/1/5 01:40
查看所有更新日志
b699f-于