凡品【FanPin】文档
首页文档中心关于我们
首页文档中心关于我们
  1. 接口规则
  • 概述
  • 笔记
    • ProxmoxVE
      • ProxmoxVE 8.4 常见问题
      • ProxmoxVE 9.0 常见问题
      • Ceph 相关
    • MySQL
      • MySQL
      • Git存储方式实现
    • Debian
      • Debian 12 常见问题
      • Debian 13 常见问题
    • Nginx
      • Nginx 调优
      • Nginx 安装
    • APISIX
      • APISIX部署
      • APISIX常见问题
    • Haproxy
      • Haproxy 3.2 本地
      • Haproxy 3.0.10-r1
      • Haproxy 3.2 公网
    • SD-WAN
      • Tinc
        • TINC常见问题
        • 虚拟局域网
      • Frrouting
        • Frrouting安装
      • Netmaker
        • Netmaker部署
    • iStoreOS
      • 安装部署
    • Redis
      • Redis集群
  • 文档
    • 接口规则
      • 基本规则
      • HTTP状态码
      • 签名
    • 网关相关
      • 路由与注册
      • 自动删除弃用接口
      • 分页数据
    • 平台相关
      • 文章相关
        • 分类列表
        • 分类详情
        • 文章列表
        • 文章详情
      • 基础信息
    • 其他接口
    • 工具类【Free】
      • 网络相关
        • 获取IP信息
        • Home入口
      • 图片相关
      • 文本相关
      • 游戏相关
  1. 接口规则

签名

API通过验证签名来保证请求的真实性和数据的完整性。

请求签名#

用户需要使用自身的私钥对API URL、消息体等关键数据的组合进行SHA-256 with RSA签名。请求的签名信息通过HTTP头Authorization传递,具体说明请见如何生成请求签名。没有携带签名或者签名验证不通过的请求,都不会被执行,并返回401 Unauthorized。
## 如何生成请求签名

1. 准备#

用户需要拥有一个平台应用ID,并通过超级管理员账号登录平台,获取API证书。 API证书的压缩包中包含了签名必需的私钥。

2. 构造签名串#

我们希望商户的技术开发人员按照当前文档约定的规则构造签名串。我们会使用同样的方式构造签名串。如果用户构造签名串的方式错误,将导致签名验证不通过。下面先说明签名串的具体格式。
签名串一共有五行,每一行为一个参数。结尾以\n(换行符,ASCII编码值为0x0A)结束,包括最后一行。如果参数本身以\n结束,也需要附加一个\n。
HTTP请求方法\n
URL\n
请求时间戳\n
请求随机串\n
请求报文主体\n
第一步,获取HTTP请求的方法(GET、POST、PUT、DELETE)等。
GET
第二步,获取请求的绝对URL,并去除域名部分得到参与签名的URL。如果请求中有查询参数,URL末尾应附加有'?'和对应的查询字符串。
/home
第三步,获取发起请求时的系统当前时间戳,即格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,作为请求时间戳。API会拒绝处理很久之前发起的请求,请用户保持自身系统的时间准确。
$ date +%s 
1554208460
第四步,生成一个请求随机串,我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。这里,我们使用命令行直接生成一个。
第五步,获取请求中的请求报文主体(request body)。
请求方法为GET时,报文主体为空。
当请求方法为POST或PUT时,请使用真实发送的JSON报文。
图片上传API,请使用meta对应的JSON报文。
第六步,按照前述规则,构造的请求签名串为:
GET\n 
/home\n 
1554208460\n 
593BEC0C930BF1AFEB40B4A08C8FB242\n 
\n

3. 计算签名值#

绝大多数编程语言提供的签名函数支持对签名数据进行签名。强烈建议用户调用该类函数,使用用户私钥对待签名串进行SHA256 with RSA签名,并对签名结果进行Base64编码得到签名值。

4. 设置HTTP头#

API要求请求通过HTTP Authorization头来传递签名。Authorization由认证类型和签名信息两个部分组成。
下面我们使用命令行演示如何生成签名。
Authorization: 认证类型 签名信息
具体组成为:
① 认证类型,目前为WAC-RSA-SHA2048
② 签名信息
发起请求的应用编号app_id
请求随机串nonce_str
签名值signature
时间戳timestamp
提示
注意:以上四项签名信息,无顺序要求。
Authorization头的示例如下:(注意,示例因为排版可能存在换行,实际数据应在一行)
Authorization: WAC-RSA-SHA2048 app_id=10000,nonce_str=uE3gRtfmwH4WbL6v,signature=t7JPN+y8K7TTCr3UBWZLbT945bedAoD8/3NdTp6ynoOm9fGxUwXCFeatvOHXwV34dmCaMxWgYAOV/nOmWGVLTHr0xH720attMIPUbCnPWO+6+l1R/7nAIetihzIzNV9IsU5Ke+RaS03BHTbzPNlVyB8aAf7Z9o+JaslqhfKgB96ps70UPyy2MVM68o1B5giJsMkTKOWIi7VSHPq8oZ90axAaL4ipDMwJ22JhBq3WGjimOsgBgrcGmOkvEayJKodsuAOtefL34Vxvd+wks9VYyFaJ/L+cd4KM5n4lrgR5Ipn/orB+OqEiHku7jdVoQHXSxsRMZ/V6mCd+QaWt2YH+XQ==,timestamp=1725623504
最终我们可以组一个包含了签名的HTTP请求了。
$curl https://f.dev.woaicc.com/home -H 'Authorization: WAC-RSA-SHA2048 app_id=10000,nonce_str=uE3gRtfmwH4WbL6v,signature=t7JPN+y8K7TTCr3UBWZLbT945bedAoD8/3NdTp6ynoOm9fGxUwXCFeatvOHXwV34dmCaMxWgYAOV/nOmWGVLTHr0xH720attMIPUbCnPWO+6+l1R/7nAIetihzIzNV9IsU5Ke+RaS03BHTbzPNlVyB8aAf7Z9o+JaslqhfKgB96ps70UPyy2MVM68o1B5giJsMkTKOWIi7VSHPq8oZ90axAaL4ipDMwJ22JhBq3WGjimOsgBgrcGmOkvEayJKodsuAOtefL34Vxvd+wks9VYyFaJ/L+cd4KM5n4lrgR5Ipn/orB+OqEiHku7jdVoQHXSxsRMZ/V6mCd+QaWt2YH+XQ==,timestamp=1725623504'
修改于 2025-07-30 14:55:52
上一页
HTTP状态码
下一页
路由与注册
Built with