关于签名

签名说明

ach-access-sign的请求头:是对timestamp + method + requestPath + body使用HMAC SHA256方法用SecretKey加密,通过Base-64编码输出而得到的。
其中requestPath中参数,跟body规则一致。list值里面的顺序按照以下类型顺序int - float/double - string - list & object排序,int,double,string同类型之间按字典排序;list & object之间根据在数列红的位置进行排序;里 * 面的object/list 等子结构体以一致的规则进行递归排序。然后放回进行签名。其中去掉null以及’’值,空数列[].空字典{}。

签名串示例:

示例:
{{“x”: 1, “y”: 2}, 1, 3, 2, -4, 1.1, “xxxxx”, “yyyy”, “jscx”, 0, “sss”,{“z”:2,”x”:1,”a”:””}}
排序后:
{-4,0,1,2,3,1.1,”jscx”,”sss”,”xxxxx”,”yyy”,{“x”: 1, “y”: 2},{“x”: 1, “z”: 2}}

注意事项:

  • 需注意原则上,传输中数列的数据排序不应对传输内容有关联。
    如Path以及body中,都有参数,则将Path以及body各自排序,然后按该拼接顺序(timestamp + method + requestPath + body)组合在一起签名
    例子: timestamp = 1538054050234, GET 请求,path=/api/v1/crypto/order?order_no=sdf23?token=ETH, Body 为空
    签名内容为
    “1538054050234” + “GET” + “/api/v1/crypto/order?token=ETH?order_no=sdf23
  • timestamp的值与ach-access-timestamp请求头相同,为ISO格式,Unix 时间,以毫秒为单位,十三位时间戳。
    如:1538054050231
  • method是请求方法,字母全部大写
    如:GET/POST
  • requestPath是请求接口路径,大小写敏感, 如果URL已/结尾,仍然还需加上
    如:/api/v1/crypto/order
  • body是指请求主体的字符串,如果请求没有主体(通常为GET请求)则body可省略,字典顺序,body内部的结构也是字典顺序,空值不参与签名
    任何参数为空时,会被过滤掉,不参与签名。
    例如: ‘1538054051230’ + ‘GET’ + ‘/api/v1/crypto/token/price’ + body
  • secretKey,apiKey 大小写敏感
    使用 HMAC SHA256 使用密钥对于哈希字符串进行签名。
    以 Base64 格式对签名进行编码。