概述
前一篇文章我们介绍了设备密钥的认证方式,那么这里重点来看如何通过Qt的HTTP接口来实现一型一密动态注册的流程。
一型一密动态注册
【官网介绍】 直连设备使用一型一密动态注册的流程:
- 在物联网平台预注册设备,并获取产品证书(ProductKey和ProductSecret)。预注册设备时,可以使用设备的MAC地址或SN序列号等作为DeviceName。
- 在控制台开启设备所属产品的动态注册开关。
- 将产品证书烧录至固件。
- 设备向云端发起身份认证。云端认证成功后,下发DeviceSecret。
- 设备使用设备证书与云端建立连接。
直连设备动态注册,通过HTTP发送请求。 需先在控制台上,开通该产品的一型一密动态注册功能,如下,这个开关要打开:
URL模板: https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device
HTTP方法: POST
请求数据格式:
POST /auth/register/device HTTP/1.1
Host: iot-auth.cn-shanghai.aliyuncs.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 123
productKey=1234556554&deviceName=deviceName1234&random=567345&sign=adfv123hdfdh&signMethod=HmacMD5
响应数据格式:
{
"code": 200,
"data": {
"productKey": "1234556554",
"deviceName": "deviceName1234",
"deviceSecret": "adsfweafdsf"
},
"message": "success"
}
参数说明:
根据官网的接口说明,我们使用Qt接口来请求。
Qt Http post请求动态注册设备
= "xxxxx";
QString productSecret = "xxxxx";
QString deviceName = "xxxxx";
QString message = "deviceNameXXXXXXproductKeyXXXXXXXrandom123222";
QUrlQuery params;
QString sign = QMessageAuthenticationCode::hash(message.toLocal8Bit(),
productSecret.toLocal8Bit(),
QCryptographicHash::Sha1).toHex();
params.addQueryItem("productKey",productKey);
params.addQueryItem("deviceName",deviceName);
params.addQueryItem("random","123222");
params.addQueryItem("sign",sign);
params.addQueryItem("signMethod","HmacSHA1");
QNetworkRequest request;
QString data = params.toString();
request.setUrl(QString("https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;");
request.setHeader(QNetworkRequest::ContentLengthHeader, data.size());
m_pNetWorkManager->post(request,data.toUtf8() );
注意,虽然是动态注册设备,但前提要现在阿里云IOT上创建好设备。上面代码中的xxxx换成自己的响应信息。
在正式项目中,也可以选择批量添加设备。
请求完成就会收到服务器下发的数据啦:
"{\"code\":200,\"data\":{\"deviceName\":\"xxxxxxxxx\",\"deviceSecret\":\"xxxxxxxxxxxx\",\"productKey\":\"xxxxxxxx\"},\"message\":\"success\"}"
ok,这时候就请求到设备的deviceSecret
了,接下来就可以通过这些信息去正式连接服务器。