第三方平台回调配置
# 1. 回调服务什么时候需要
在集成与开发者第三方应用系统时,需要搭建一个回调服务。
可以实现:
# 告警事件实时推送
比如,当设备有告警事件产生的时候,可以较实时地将设备异常信息推送给第三方应用系统。
# 识别事件实时推送
比如,人员通过设备身份核验识别的时候,可以较实时地将设备异常信息推送给第三方应用系统。
# 2. 回调服务需要哪些配置

配置回调服务,需要有三个配置项,分别是:回调URL, Token, EncodingAESKey。
回调URL:
URL为开发者设置回调服务地址,用于接收通知消息或者事件。
Token:
Token用于计算签名,由英文或数字组成且长度不超过32位的自定义字符串。开发者提供的URL是公开可访问的,这就意味着拿到这个URL,就可以往该链接推送消息。那么URL服务需要解决两个问题:
- 如何分辨出是否为熵基智联来源
- 如何分辨出推送消息的内容是否被篡改
通过数字签名就可以解决上述的问题。
具体为:
- 约定Token作为密钥,仅开发者和熵基智联知道,在传输中不可见,用于参与签名计算。
- 和熵基智联在推送消息时,将消息内容与Token计算出签名。
- 开发者接收到推送消息时,也按相同算法计算出签名。
- 如果为同一签名,则可信任来源为熵基智联,并且内容是完整的。
- 如果非熵基智联来源,由于攻击者没有正确的Token,无法算出正确的签名;
- 如果消息内容被篡改,由于开发者会将接收的消息内容与Token重算一次签名,该值与参数的签名不一致,则会拒绝该请求。

EncodingAESKey:
EncodingAESKey用于消息内容加密,由英文或数字组成且长度为16位的自定义字符串。由于消息是在公开的因特网上传输,消息内容是可被截获的,如果内容未加密,则截获者可以直接阅读消息内容。若消息内容包含一些敏感信息,就非常危险了。EncodingAESKey就是在这个背景基础上提出,将发送的内容进行加密,并组装成一定格式后再发送。

URL服务验证签名通过后,需要将POST数据解密,就可以得到对应的业务消息明文。
# 3. 验证第三方平台回调地址
假设开发者接收推送数据的URL设置为 https://api.3rd.com/receive.
开发者在控制台保存回调配置信息时,熵基智联会发送一条验证消息到填写的URL,请求内容如下:
请求方式: Get
请求地址: https://api.3rd.com/receive?sign=XXXXXXXXX×tamp=XXXXXXXX&nonce=XXXXXXXX&echo=XXXXXXXXXXXXXX
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| sign | String | 加密签名,token为开发者回调配置. sign = MD5-32 (token+timestamp+nonce),MD5加密,32位小写. |
| timestamp | Long | 当前Unix时间戳(毫秒),用于防止请求重放攻击(时间戳有效期为5分钟) |
| nonce | String | 8位长度字符串随机数。与timestamp结合使用,用于防止请求重放攻击 |
| echo | String | 加密的字符串,需要将解密后echo明文返回,以便验证合法性。 |
回调服务需要作出正确的响应才能通过URL验证,具体操作如下:
1.对收到的请求,解析上述的各个参数值;
2.根据已有的token,结合第1步获取的参数timestamp, nonce,重新计算签名,然后与参数sign检查是否一致,确认调用者的合法性;
3.响应GET请求, 需要将解密后echo明文返回 解密算法: 详见 加解密算法 , 其中解密因子:sSrc=echo, cKey=appKey, cIv=encodingAESKey, 如果不符合要求,则认为失败.
# 4. 获取熵基智联推送平台的IP段
熵基智联在回调第三方平台指定的URL时,是通过特定的IP发送出去的。如果第三方平台需要做防火墙配置,那么可以通过这个接口获取到所有相关的IP段。建议三方平台每天定时拉取IP段,更新防火墙设置,避免因IP段变更导致网络不通。
请求方式: Get
请求地址: https://api.zkbiocloud.com/open/edu/global/v1/channel/ip
返回结果:
{
"code": "00000000",
"payload": {
"results": [
"192.168.6.4",
"192.168.6.5"
]
}
}
2
3
4
5
6
7
8
9