回调签名规范

适用范围

WebHook回调

签名目的

当迅联云回调第三方时,请求会穿越不安全的公网

为了保障网络安全,迅联云所有回调,都会有签名

规范

1、参数准备

a.固定参数

Key 来源 备注
token App的WebHook设置中会产生 如不清楚,请联系迅联集成测对接人员

b.动态参数

当请求到达第三方时,用户会从request得到url、method、header、body
以下参数,均来自于这几部分

Key 来源 备注
appKey header.appKey
body body 注意为String
method method 固定为POST
nonce header.nonce
timeStamp header.timeStamp
url url

c.签名

Key 来源 备注
authorization header.authorization

2、验签

a. 生成带签名字段 toSign

将动态参数Key按升序排列,并将其值相加起来即得到toSign

下面代码为迅联签名侧伪代码
注意:在迅联签名侧,已经将header涉及到的动态参数URL编码了,但body未有

    public static String generateToSign(String appKey,
                                        String body,
                                        String method,
                                        String nonce,
                                        Long timeStamp,
                                        String url) {
        StringBuilder sb = new StringBuilder();
        sb.append(encodeUrlUTF8(appKey))
                .append(encodeUrlUTF8(body))
                .append(encodeUrlUTF8(method))
                .append(encodeUrlUTF8(nonce))
                .append(encodeUrlUTF8(String.valueOf(timeStamp)))
                .append(encodeUrlUTF8(url));
        return sb.toString();
    }

b. 生成secret

将token URL编码得到secret
伪代码如下:

String secret = encodeUrlUTF8(token);

c. 签名生成signature

经过如下三部得到签名

  1. HmacSHA256签名
  2. Base64
  3. URL编码

伪代码如下:

String CHARSET_NAME = "UTF-8";
String MAC_NAME = "HmacSHA256";
Mac mac = Mac.getInstance(MAC_NAME);
Key key = new SecretKeySpec(secret.getBytes(CHARSET_NAME), MAC_NAME);
mac.init(key);
byte[] signData = mac.doFinal(toSign.getBytes(CHARSET_NAME));
return encodeUrlUTF8(Base64.encodeBase64String(signData));

d.签名对比

authorization = “XLCB “ + signature
“XLCB “为固定前缀,注意空格

文档更新时间: 2019-07-12 16:03   作者:admin