MQTT连接签名示例
Posted HaaS技术社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MQTT连接签名示例相关的知识,希望对你有一定的参考价值。
若您不使用阿里云提供的设备端SDK,而是使用其他方式,自己进行开发使您的设备使用MQTT协议与物联网平台连接,您可以参见本文提供的签名代码示例进行MQTT连接签名。
说明
推荐您使用阿里云提供的设备端SDK。使用阿里云提供的任何一种语言的设备端SDK,则不用您自己配置签名机制。请访问下载设备端SDK查看阿里云提供的SDK下载路径。
如果您不使用阿里云提供的设备端SDK,而是使用其他方式将您的设备接入物联网平台,需了解:
- 需要您自己保证连接的稳定性、MQTT连接保活和MQTT连接断开重连。
- 不使用设备端SDK连接阿里云物联网平台导致的连接问题,阿里云不负责相关的技术支持。
- 如果您要使用物联网平台提供的OTA、物模型、一型一密等多种功能,需您自己去编写这些功能的实现。这将会耗费较多的开发时间、以及bug修复时间。
签名计算代码示例
若您不使用阿里云物联网平台设备端SDK,可单击以下链接,访问相关代码示例页面。
- sign_mqtt.c:实现签名函数的代码示例。
- sign_api.h:定义签名函数用到的数据结构的代码示例。
- sign_sha256.c:签名函数可能使用的算法实现代码示例。如果您自己的平台上有HMACSHA256的实现,可以不编译本文件,但是需要提供函数
utils_hmac_sha256()
给sign_mqtt.c中的API调用。 - 用于测试签名函数的代码示例。
签名函数API接口说明
函数原型 | |
函数功能 | 根据输入的IoT设备身份认证信息,输出连接到阿里云物联网平台时所需要的域名、MQTT ClientID、MQTT Username、MQTT Password。之后,您可以将这些信息提供给MQTT Client用于连接阿里云物联网平台。 |
输入参数 | 输入参数内容包括:
|
输出参数 | signout:输出的数据,该数据将用于MQTT连接。 代码示例: 其中包含参数:
具体参数说明,请参见MQTT-TCP连接通信。 |
返回值 |
|
签名API使用示例
以下以sign_test.c中的测试代码为例。
#include <stdio.h>
#include <string.h>
#include "sign_api.h" //包含签名所需的各种数据结构定义
//下面的几个宏用于定义设备的阿里云身份认证信息:ProductKey、ProductSecret、DeviceName、DeviceSecret
//在实际产品开发中,设备的身份认证信息应该是设备厂商将其加密后存放于设备Flash中或者某个文件中,
//设备上电时将其读出后使用
#define EXAMPLE_PRODUCT_KEY "a1X2bEn****"
#define EXAMPLE_PRODUCT_SECRET "7jluWm1zql7b****"
#define EXAMPLE_DEVICE_NAME "example1"
#define EXAMPLE_DEVICE_SECRET "ga7XA6KdlEeiPXQPpRbAjOZXwG8y****"
int main(int argc, char *argv[])
iotx_dev_meta_info_t meta_info;
iotx_sign_mqtt_t sign_mqtt;
memset(&meta_info, 0, sizeof(iotx_dev_meta_info_t));
//下面的代码是将上面静态定义的设备身份信息赋值给meta_info
memcpy(meta_info.product_key, EXAMPLE_PRODUCT_KEY, strlen(EXAMPLE_PRODUCT_KEY));
memcpy(meta_info.product_secret, EXAMPLE_PRODUCT_SECRET, strlen(EXAMPLE_PRODUCT_SECRET));
memcpy(meta_info.device_name, EXAMPLE_DEVICE_NAME, strlen(EXAMPLE_DEVICE_NAME));
memcpy(meta_info.device_secret, EXAMPLE_DEVICE_SECRET, strlen(EXAMPLE_DEVICE_SECRET));
//调用签名函数,生成MQTT连接时需要的各种数据
IOT_Sign_MQTT(IOTX_CLOUD_REGION_SHANGHAI, &meta_info, &sign_mqtt);
...
以上是关于MQTT连接签名示例的主要内容,如果未能解决你的问题,请参考以下文章