A Auth 授权中心
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(仅用于开发期对齐,生产环境请内置,避免被中间人替换)