标准 HTTP API 签名鉴权 Header 完整规范

一、统一请求头命名(全行业通用 X- 前缀)

Header 字段 含义 格式要求
X-App-Key 客户端应用唯一标识 字符串,服务端分配
X-Timestamp 秒级时间戳 10位Unix时间戳
X-Nonce 随机防重串 8~32位大小写+数字
X-Sign 最终签名值 大写MD5/SHA256
X-Real-IP 客户端真实IP 转发层透传
X-Device-Id 设备唯一标识 移动端/客户端可选

为什么都是X开头?

因为早期 HTTP 规范规定:

  • 不带 X-**:标准官方请求头(Host、User-Agent、Cookie、Referer 等)
  • X- 前缀**:代表私有、自定义、非标准化的头部字段

作用:

避免和未来官方标准头重名冲突

一眼区分:系统内置头 / 业务自定义头

行业通用习惯,所有人都这么约定

二、签名算法规则(通用最简版)

  1. 排序规则
    AppKey、Timestamp、Nonce、请求参数ASCII升序拼接

  2. 拼接格式

    key1=val1&key2=val2&...&secret=AppSecret

  3. 加密方式

  • 简易项目:MD5
  • 正式生产:SHA256
  1. 超时防刷
    服务端校验时间戳差值 ±60秒,超出直接拒绝

三、GET/POST 统一签名逻辑

  • GET:URL参数全部参与签名
  • POST JSON:JSON完整字符串参与签名
  • 路径、Header自定义字段不参与

四、请求示例

http 复制代码
POST /api/data HTTP/1.1
Host: shturl.cc/V
X-App-Key: client123666
X-Timestamp: 1747652000
X-Nonce: 8sJd72kP9z
X-Sign: E8F2D7A9C0B3E1F56789ABCD12345678
Content-Type: application/json

{"name":"test","id":1}

五、服务端中间件校验顺序

  1. 校验是否携带全部必填Header
  2. 校验时间戳是否过期
  3. 校验Nonce是否重复(Redis去重)
  4. 本地重组签名对比 X-Sign
  5. 校验通过放行,失败统一返回401

六、避坑要点

  1. 签名参数必须排序,顺序错必失败
  2. 前后端密钥一致、编码UTF-8
  3. 空格、换行、特殊字符原样参与加密
  4. 禁止把 AppSecret 放在请求头传输

七、极简通用签名伪代码

复制代码
str = 排序后所有参数拼接 + AppSecret
sign = SHA256(str).toUpperCase()
相关推荐
就叫_这个吧13 小时前
IDEA中Javaweb项目创建+servlet,实现简单的信息录入获取
java·servlet·intellij-idea·web
贺今宵15 小时前
Vue 3 + Capacitor 使用jeep-sqlite,web端使用本地sqlite数据库
前端·数据库·vue.js·sqlite·web
齐鲁大虾15 小时前
如何彻底解决从公网HTTP页面请求私有HTTP资源跨域问题
网络·网络协议·http
韩曙亮16 小时前
【Flutter】Flutter 中的 Android / iOS 特殊配置 ① ( 网络权限配置 | HTTP 明文传输配置 | 应用名称配置 )
android·网络·flutter·http·ios·网络权限
WIZnet19 小时前
W55RP20-EVB-MKR 模块 MicroPython 实战 (11):HTTP 协议与 OneNET 平台数据上云
网络·网络协议·http
许彰午19 小时前
微服务安全上下文的透明传递——ThreadLocal透传与HTTP头转发的完整链路
安全·http·微服务
触底反弹19 小时前
从 Bun 到 DeepSeek:用 TypeScript 构建你的第一个 AI Agent
人工智能·http·typescript
遇事不決洛必達20 小时前
【爬虫随笔】深入理解 HTTP/HTTPS 协议、接口交互与会话机制
爬虫·网络协议·http·https·session
华山令狐虫21 小时前
DBAPI 接入 Milvus 向量数据库:HTTP 执行器参数映射实战
数据库·http·milvus·dbapi
王码码20351 天前
多台服务器怎么统一看状态?Beszel 轻量监控,搭起来不费事
运维·服务器·后端·安全·阿里云·接口·web