HTTPS · RS256 签名 · 防重放
授权接口说明
客户端联网校验的唯一接口。服务端私钥签名响应,客户端内置公钥验签;任何未通过验签的响应都应视为无效。
请求
时间戳允许偏差 ±300 秒;nonce 长度 16-64,仅含字母数字与下划线、短横线; 同一 nonce 在同一机器码上只能使用一次。
POST https://auth.example.com/api/v1/license/verify
Content-Type: application/json
{
"machine_code": "A1B2-C3D4-E5F6-7890",
"domain": "example.com",
"nonce": "9f2c1a7b4e8d6305",
"ts": 1762156800,
"version": "1.0.0"
}
响应(签名信封)
payload 是 base64url 编码的原始 JSON 字节;sig 是对这些原始字节的签名。
客户端必须:验签 → 校验 ts 窗口 → 校验 nonce 与请求一致 → 再读取 code。
{
"alg": "RS256",
"payload": "eyJjb2RlIjowLCJtc2ciOiLm..",
"sig": "Base64(签名)"
}
// payload 解码后
{
"code": 0,
"msg": "授权有效",
"ts": 1762156801,
"nonce": "9f2c1a7b4e8d6305",
"data": {
"license_no": "8F3A1C09D2B7E645",
"status": "active",
"domain": "example.com",
"machine": "A1B2****7890",
"email": "z***@example.com",
"expires_at": 1793692800,
"expires_text": "2026-11-03 15:50:00",
"days_left": 365,
"max_rebind": 3,
"rebind_used": 1,
"rebind_left": 2,
"check_interval": 1800,
"offline_grace_hours": 72,
"server_time": 1762156801
}
}
返回码
| code | 含义 | 客户端动作 |
|---|---|---|
| 0 | 授权有效 | 刷新本地有效期,继续运行 |
| 1001 | 参数不合法 | 检查配置/机器码格式 |
| 1003 | 服务端异常 | 按网络异常处理,走宽限期 |
| 2001 | 未找到授权 | 退出 |
| 2002 | 授权已过期 | 退出 |
| 2003 | 已被拉黑 | 退出 |
| 2004 | 域名不匹配 | 退出 |
| 2005 | 卡密禁用 | 退出 |
| 2006 | 重放/时间戳过期 | 校准时间后重试,连续失败退出 |
| 2007 | 请求过于频繁 | 退避重试 |
| 2008 | 机器码不匹配 | 退出 |
公钥(RS256)
编译客户端时把它内置到代码中;服务端换钥后需重新发布客户端。
-----BEGIN PUBLIC KEY----- MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAuvsa7F8YVHzxySxN1OnN +2dHsSggtQXkfzlQkFpEdgtZPjxK/6eaAt+eLF+/PpZEzVTa/XzSIFFF7+N1PkPD Om7cz+xjllZb/QP6WqHS/pVJe44X+URtzkIzHrGybNcfeVOVUGyR16XkcSRTlO/S mwZqMctuCnq92FgRkl8Gty4+IDHyPJWZHq2wCEWK9jGpKJ9w09IQcsYRVWrvFYQC Ua1OE5K6N0vJjF6OciQxc4agkkSoY8IZgg2x1kyfU0bDR4u8R/2DDhriX0KQYcAi hs8d8tqOB4xBWvSRkrfs/wxiNdrpsLHnEexpprA+fjsT3oaL7YI6748I92u33w+s h8h1yogM4tvplx9Ku0bzeRHeSBTFnePjTVT5W8yylbOk9JNZYH+/YHCYpeZNU7AM SI4WZjNL+uJWMYGcPO3ZcxjKpKn7sUaGqSM6SRjw2Ms4C54hcTzpEWR7iV0mSdOQ 9k4vfP6+l2c4IbKfSJ7565glPJfdswqLeuKPP+k6BScDAgMBAAE= -----END PUBLIC KEY-----
在线获取:/api/v1/public-key(仅用于开发期对齐,生产环境请内置,避免被中间人替换)