回调签名规范
适用范围
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
经过如下三部得到签名
- HmacSHA256签名
- Base64
- 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