签名说明
WPS-3 签名算法说明
Header 说明
Header 名称 | 是否必须 | 说明 |
---|---|---|
Content-Type | 是 | 目前固定为:"application/json" |
Date | 是 | RFC1123 格式的日期,例: Wed, 23 Jan 2013 06:43:08 GMT |
Content-Md5 | 是 | 当 HTTP 请求的 Body 有数据时,计算 Body 的 MD5 值,否则计算空字符串的 MD5 值。再将 MD5 值转为十六进制字符串形式。即:Format("%x", md5Byte) |
X-Auth | 是 | 格式:“WPS-3:” + AppID + “:” + SIGN,各部分说明如下: WPS-3: 接口版本,固定为 WPS-3 URL: 不带域名(不包含/open),只包含 url 和 query 参数(例如接口地址为 http://domain/open/api_url?app_id=aaaa,url 只用定义为/api_url?app_id=aaaa) SIGN: sha1(ToLower(SecretKey) + Content-Md5 + URL + Content-Type + Date).HexString(),将标准 sha1 算法计算的结果,转为 16 进制字符串形式 |
示例
Content-Md5 示例
空字符串Content-Md5计算结果:d41d8cd98f00b204e9800998ecf8427e
完整示例
String AppId = "AK123"
String SecretKey = "sk456"
String URL = "/api/v1/dosomething?name=xiaoming&age=18"
String ContentType = "application/json"
String Date = "Wed, 03 Nov 2021 02:55:55 GMT"
当RequestBody=""时:
Date: Wed, 03 Nov 2021 02:55:55 GMT
Content-Md5: d41d8cd98f00b204e9800998ecf8427e
Content-Type: application/json
X-Auth: WPS-3:AK123:695229194add4899ffde601d691a1f2d398e7fab
当RequestBody=`{"key":"value"}`时:
Date: Wed, 03 Nov 2021 02:55:55 GMT
Content-Md5: a7353f7cddce808de0032747a0b7be50
Content-Type: application/json
X-Auth: WPS-3:AK123:995beeb31091d56cf6f203ff2eddbf04d65ac4b8
代码示例
WPS-4 签名算法说明
Header 说明
参数 | 参数类型 | 是否必须 | 说明 |
---|---|---|---|
Content-Type | string | 否 | 目前固定为:"application/json" |
Date | string | 是 | 取当前时间,格式:"Wed, 23 Jan 2013 06:43:08 GMT" |
Authorization | string | 是 | 签名值,格式:<type> <credentials> |
计算方法如下:
Authorization:"WPS-4 $AppId:$Signature"
Signature:hmac-sha256(AppKey, Ver + HttpMethod + URI + Content-Type + Date + sha256(HttpBody)) //sha256 与 hmac-sha256 均取小写十六进制字符串
其中:
AppId:用于匹配签名使用的 AppKey,必须提供。
AppKey:签名使用的 Key。
Ver: WPS-4,表示算法版本,后续算法有更新,则变更该字段。
HttpMethod:表示 HTTP 请求的 Method 的字符串,如 PUT、GET、POST、HEAD、DELETE 等。
URI:不带域名,如:"/api_url?app_id=aaaa"。
Content-Type:表示请求内容的类型,如:"application/json"。
Date:自行对签名时限进行验证。
HttpBody:如果为空,则 sha256(body)部分取空串。
| 注:现阶段大部分接口都使用 WPS-3 签名算法,只有少部分场景使用 WPS-4 签名算法。