PHP域名授权系统完整方案:无感自动激活、客户自助改域名、升级权限管控
一、方案概述
这套授权系统面向PHP程序产品,主打无感激活、离线可用、客户自助管理、精细化升级权限控制,兼顾客户使用体验和作者管控能力,适合商业源码、SAAS类程序做域名授权。
核心设计思路:网站日常运行依靠本地签名凭证离线校验,授权服务器故障不影响客户业务;联网动作只集中在激活、刷新授权、版本查询、升级这几个环节,同时把升级权限单独隔离,做到“能看更新日志,无授权账号则不能升级”。
整套能力清单:
无感安装激活:客户上传源码,访问安装页面自动识别域名与服务器特征,不需要手动填写授权码、账号,预授权域名直接完成激活;
离线运行:激活成功生成带HMAC签名的本地授权文件license.dat,网站访问只校验本地凭证,断网、授权服务器宕机都不影响网站正常使用;
客户自助授权后台:分配独立账号密码,客户自行修改绑定域名,支持配置域名修改周期上限,防止倒卖、转租授权;
独立刷新授权:客户在授权后台修改域名后,不会立刻生效,需要到自己网站后台手动【刷新授权】拉取新凭证;
更新分层管控:检测更新、查看版本号和更新说明无需登录;点击【确认升级】时,才校验授权账号凭证,没有有效登录凭证禁止升级。
二、整体业务流程
1. 管理员前置操作
管理员在授权管理后台预先录入客户域名,生成客户专属登录账号与密码,设置授权到期时间、域名修改次数、账号状态(正常/拉黑)。域名录入后处于预授权状态,等待客户激活。
2. 客户无感激活流程
客户将程序上传到服务器,访问安装页面install.php:
程序自动抓取当前访问域名、服务器IP、机器特征码,组合生成机器码machine_code;
自动携带域名、机器码、时间戳、HMAC签名请求授权服务器激活接口;
授权服务器校验:查询数据库是否存在该预授权域名、账号未拉黑、未过期;
校验通过:服务端生成带签名的授权数据包下发,程序自动写入本地
license.dat;激活完成,无任何输入表单,全程无感。
若域名未预授权、账号被禁用、已过期,直接返回激活失败提示。
3. 网站日常访问校验(离线)
客户网站每次运行,读取本地 license.dat:
校验HMAC签名,防止篡改授权文件;
校验当前访问域名、机器码、授权有效期;
全部校验通过,网站正常运行;全程不请求授权服务器,支持离线使用。
4. 客户自助修改域名
客户登录独立授权自助后台(账号密码由管理员下发);
页面展示当前绑定域名、到期时间、本月剩余域名修改次数;
提交新域名,系统校验域名格式、周期修改次数;
校验成功,修改数据库内绑定域名记录;
提示客户:域名修改成功,需要到网站后台点击【刷新授权】才会生效。
仅修改数据库记录,不会自动同步客户网站本地授权文件,保证网站不会突然失效。
5. 刷新授权(同步域名)
客户在网站后台点击【刷新授权】:
读取本地license内的aid、域名、机器码;
联网请求授权服务器,拉取数据库里最新绑定域名;
校验账号状态合法后,下发全新授权包,覆盖本地license.dat;

本地校验域名更新为新域名,完成域名切换。
刷新授权和升级登录凭证相互独立,互不干扰。
6. 更新与升级分层权限逻辑(重点)
采用两套接口分离设计,实现“可看更新、升级受控”:
版本查询接口(无需登录Token)客户后台点击【检测更新】,自动携带license内aid、域名、机器码+签名请求接口。 仅校验账号是否正常、未过期,返回版本号、发布时间、更新日志。 👉 效果:所有客户都能正常看到新版本和更新说明,提升体验。
升级执行接口(必须登录校验)客户看完更新日志,点击弹窗里【确认升级】:
本地不存在
update_token.dat或者token过期:弹出账号密码登录窗口;存在有效token:携带token、aid、域名、机器码请求升级接口;
授权服务器校验token合法性、绑定的域名/机器码、账号状态;
校验通过,返回加密升级包地址、解密密钥,开始执行升级;校验失败拒绝升级。
登录流程 客户输入授权账号密码提交登录,授权服务器验证账号密码,下发30天有效期的update_token,存入本地
update_token.dat。登录成功后自动继续执行升级流程。管理员拉黑账号、修改客户密码时,一键清空该账号下全部token,下次升级必须重新登录。
三、核心安全设计
HMAC-SHA256全局签名所有接口传输数据都附带签名,服务端校验签名,防止参数篡改、抓包重放激活请求;客户端与授权服务器使用同一套保密通信密钥。
机器码绑定激活时生成机器码,和域名、账号绑定。即使域名是预授权域名,换到别的服务器也无法激活,有效防止域名被盗刷盗用。
HTTP_HOST风险防护Host请求头存在伪造风险,依靠机器码绑定做二次限制;可额外开启DNS解析IP比对(CDN场景慎用)。
文件访问保护
license.dat、update_token.dat放在data目录,配置Nginx/Apache禁止外部直接访问,防止凭证泄露。域名修改次数风控限制周期内域名修改次数(例如每月2次),避免客户购买一份授权,频繁更换域名转租倒卖。
升级包安全升级包建议加密,下载地址做短时一次性有效,不提供永久公开下载链接。
日志留存授权服务器记录激活日志、域名修改日志、token登录日志、升级日志,方便排查盗用、纠纷追溯。
四、数据库核心表设计
domain_auth(授权主表,管理员维护、客户自助修改域名)
字段 说明 id 主键aid,唯一授权ID domain 当前绑定域名 account 客户登录账号 password bcrypt加密密码,禁止明文存储 expire_time 到期时间戳,0代表永久授权 status 1正常,0拉黑禁用 max_change 周期最大域名修改次数 cycle_sec 修改周期,默认30天 change_count 本周期已修改域名次数 reset_time 次数重置时间 last_machine_code 上次激活服务器机器码 addtime 创建时间 auth_token(升级登录令牌表)
字段 说明 id 主键 aid 关联授权ID token 升级登录令牌 machine_code 绑定服务器机器码 domain 绑定域名 expire_time 令牌过期时间 create_at 令牌生成时间
五、方案优势总结
✅ 体验友好:无感激活,客户不用复制授权码;能预览更新日志,不会给客户造成“看不到更新”的困惑; ✅ 稳定性强:核心业务离线运行,授权服务器故障不影响线上网站; ✅ 管控灵活:客户自助改域名,减轻管理员工作量,同时次数限制规避倒卖风险; ✅ 权限精细:区分“查看更新”和“执行升级”,只在升级动作上做账号鉴权; ✅ 安全可靠:签名校验、机器绑定、token时效、密码加密多层防护,降低盗用风险。
六、适用场景
适合PHP开发的商业程序、企业管理系统、CMS、插件、源码产品做域名授权售卖;适合不想给客户分发授权码、希望简化客户部署流程,同时严格管控升级权限的产品。










发表评论