API 鉴权签名设计(免费版)
输入
| 字段 | 必填 | 说明 |
|---|---|---|
| appKey / appSecret | 是 | 平台分配的密钥对 |
| method / path | 是 | 请求方法(GET/POST)、接口路径 |
| timestamp / nonce | 是 | 秒级时间戳、每次随机串(防重放) |
| body | 否 | 请求体原文(空体也参与摘要) |
| jwt exp / now / leeway | JWT场景 | 过期时间戳、当前时间、时钟容差秒 |
输出
规范签名串 + HMAC-SHA256签名 + Authorization头 + JWT是否过期
工作流
- 规范签名串:
方法大写\n路径\n时间戳\nnonce\n请求体SHA256摘要。 - 用 appSecret 对签名串做 HMAC-SHA256,得64位hex签名。
- 组装
HMAC-SHA256 key="...",ts="...",nonce="...",sig="..."头;简单令牌用Bearer <key>。 - 服务端用恒定时间比较验签;JWT 当 now>exp+leeway 判过期。
硬性规则
- 请求体(含空体)必须先做 SHA256 摘要再入签名,防篡改。
- 时间戳与 nonce 必须随每次请求变化,服务端校验时间窗防重放。
- 密钥只用于服务端签名/验签,不进 URL、不进日志。
- 无 exp 的 JWT 按 RFC7519 视为不过期。
示例
POST /api/order,体 {"a":1},ts=1700000000,nonce=n1 → 固定签名串与64位签名
JWT exp=1000,now=1001 → 已过期;now=999 → 未过期