设备端提供设备激活鉴权、资源请求等设备接入的核心接口。
# 调用方式
# 概述
平台为设备接入提供了一组包括激活、获取设备资源等能力的接口,设备通过调用接口与平台进行交互。
- 设备激活接口
设备端首次接入时可调用此接口可激活设备
- 设备认证
设备调用此接口获取设备拥有的资源,如MQTT连接配置、视频直播配置等。
# 签名认证
设备端API会对每个访问的请求进行设备身份认证,以保障设备的安全。安全认证采用请求签名机制。核心鉴权信息由instanceId、productKey和deviceName组成,均为字符串,由平台颁发给设备。其中instanceId、productKey、deviceName用于标识设备身份,deviceSecret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密。
对于每个HTTP请求,用户需要使用下文所描述的方式生成一个签名字符串,并将认证字符串放在HTTP请求的Authorization头域里。
# 签名生成算法
将接口路径、分钟级时间戳和请求参数(body的JOSN字符串,没有请求参数时,将body设置为{})拼接成待加密字符串authStringPrefix,参数之间以换行符"\n"连接,拼接字符串中不能包含空格
格式:
{url}\n{expiryTime}\n{JSONString(body)}
{url}\n{expiryTime}{}
示例:
/v1/devices/zfm8n1p5y1qzc09a/test01/test01/resources 26944410 {"resourceType":"MQTT"}
或
/v1/devices/zfm8n1p5y1qzc09a/test01/test01/auth 26944410 {}
分别获取deviceSecret、authStringPrefix的字节数组
使用获得的deviceSecret字节数组对上述authStringPrefix字节数组进行HmacSHA256加密
将加密后得到的byte数组进行Base64编码得到signature,并对signature进行urlencode处理
将最终得到的signature和分钟级时间戳放到请求的header中
不同编程语言实现签名算法时,对字符串的处理方法存在差异,以下两点需特别注意:
body json string不要带空格,如python的json.dumps()为了美观会加上空格,导致鉴权失败,请指定参数separators=(',','😂
urlencode处理时需对全部字符进行转换,如python中使用urllib.parse.quote()时默认不对‘/’进行编码,需要是应用urllib.parse.quote('待转换字符串', safe='')
# 接入地址
平台实例详情页查看 连接地址