通过微服务网关接入的每个客户端有一个 appKey 和 appSecret,客户端必须对其 appSecret 保密。
每个 API 都会带一个名为 Authorization 的 HTTP 头:
yaml
Authorization: XR1-HMAC-SHA256 Credential=<appKey>/<timestamp>/<service>,Signature=<signature>
首先加密方式,目前固定为 XR1-HMAC-SHA256。
Credential 由 3 部分组成:appKey、当前的毫秒时间戳及服务名;Signature 即为最终签名,签名字符串的格式是 16 进制小写。
XR1-HMAC-SHA256 后面是空格,Credential 和 Signature 之间用英文逗号分隔
yaml
Authorization: XR1-HMAC-SHA256 Credential=12345678/1464519583059/creation,Signature=5caa23d394f55dbb7ac47c2ef3c14ae1252a70bbb9ad8c05e6b6ae68e8fed0c7
实现版本:固定为 XR1-HMAC-SHA256。
时间戳:当前的毫秒时间戳,例如 1463788815124,和服务器时间相差不能超过 5 分钟。
HTTP 方法:GET|POST|PUT|DELETE
示例:UriEncode("/account/create")
URL 参数(如果没有,则不加这一项):按照参数名的首字母顺序升序
示例:UriEncode(<param1>) + "=" + UriEncode(<value1>) + "&" + ... + "&" + UriEncode(<paramN>) + "=" + UriEncode(<valueN>)
HTTP JSON 请求体(如果没有或者不是 JSON 请求体,比如文件流,则不加这一项)
示例:Lowercase(Hex(SHA256Hash(<payload_string>)))
以上所有内容通过 \n 拼接后,得到的即为待签名字符串 stringToSign。使用 appSecret 对其进行签名即得到 Signature:Lowercase(Hex(HmacSHA256(appSecret, stringToSign))。