跳转至

iotauth - IOT 鉴权库,用于生成各种物联网云平台的参数

作者:马梦阳

一、概述

在物联网(IoT)设备接入云平台时,设备身份认证是安全通信的第一步。主流物联网云平台(如阿里云 IoT、华为云 IoT、OneNet 等)普遍采用“三元组”机制进行设备鉴权——即通过 ProductKey(产品标识)、DeviceName(设备名称)和 DeviceSecret(设备密钥) 唯一标识并验证设备身份。

然而,不同平台对三元组的使用方式、签名算法和 MQTT 连接参数(client_id、username、password)的构造规则各不相同,开发者需针对每个平台单独实现认证逻辑,开发成本高且易出错。

为此,LuatOS 提供了统一的 IoT 鉴权库(iotauth),封装了主流云平台的认证流程。开发者只需传入三元组信息,即可自动计算并生成符合目标平台要求的 MQTT 连接参数,大幅简化设备接入流程,提升开发效率与系统可维护性。

该库仅提供生成各种公有云平台的连接参数,至于完整的公有云平台业务逻辑需要自己参考公有云平台的文档自行开发。

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/iotauth;

iotauth(main.lua)

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "iotauth_demo"
VERSION = "001.000.000"

log.info("main", PROJECT, VERSION)

-- 阿里云 MQTT 参数生成
function generate_aliyun_auth()
    local client_id, user_name, password = iotauth.aliyun(
        "a1B2c3D4e5F",
        "sensor_001",
        "Y877Bgo8X5owd3lcB5wWDjryNPoB",
        "hmacsha256",
        32472115200,
        true
    )
    log.info("aliyun", client_id, user_name, password)
end

-- 中移OneNet MQTT 参数生成
function generate_onenet_auth()
    local client_id, user_name, password = iotauth.onenet(
        "Ck2AF9QD2K",
        "test",
        "T0s3ZkJEdkIxTnR6YktZRXRZMFpKTnNGblpycGdidFY=",
        "sha256",
        32472115200,
        "2048-10-31"
    )
    log.info("onenet", client_id, user_name, password)
end

-- 华为云 IoTDA MQTT 参数生成
function generate_iotda_auth()
    local client_id, user_name, password = iotauth.iotda(
        "6203cc94c7fb24029b110408_88888888",
        "123456789"
    )
    log.info("iotda", client_id, user_name, password)
end

-- 腾讯云 MQTT 参数生成
function generate_qcloud_auth()
    local client_id, user_name, password = iotauth.qcloud(
        "LD8S5J1L07",
        "test",
        "acyv3QDJrRa0fW5UE58KnQ==",
        "sha256",
        32472115200,
        "12010126"
    )
    log.info("qcloud", client_id, user_name, password)
end

-- 涂鸦 MQTT 参数生成
function generate_tuya_auth()
    local client_id, user_name, password = iotauth.tuya(
        "6c95875d0f5ba69607nzfl",
        "fb803786602df760",
        7258089600
    )
    log.info("tuya", client_id, user_name, password)
end

-- 百度云 MQTT 参数生成
function generate_baidu_auth()
    local client_id, user_name, password = iotauth.baidu(
        "abcd123",
        "mydevice",
        "ImSeCrEt0I1M2jkl",
        "SHA256",
        32472115200
    )
    log.info("baidu", client_id, user_name, password)
end

-- 主任务函数
function main_task()
    -- 生成阿里云 MQTT 参数
    generate_aliyun_auth()
    -- 生成中移OneNet MQTT 参数
    generate_onenet_auth()
    -- 生成华为云 IoTDA MQTT 参数
    generate_iotda_auth()
    -- 生成腾讯云 MQTT 参数
    generate_qcloud_auth()
    -- 生成涂鸦 MQTT 参数
    generate_tuya_auth()
    -- 生成百度云 MQTT 参数
    generate_baidu_auth()
end

-- 启动任务
sys.taskInit(main_task)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

三、常量详解

核心库常量,顾名思义是由合宙 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为LuatOS内核固件可能会变更每个常量对应的常量取值;

如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;

iotauth 库没有常量;

四、函数详解

4.1 iotauth.aliyun(product_key, device_name,device_secret,method,cur_timestamp,istls)

功能

根据阿里云物联网平台的设备三元组(ProductKey、DeviceName、DeviceSecret),结合指定的签名算法和时间戳,生成用于 MQTT 协议接入阿里云 IoT 平台所需的三个认证参数:client_id、user_name 和 password;

注意事项

1. 该接口仅适用于阿里云 IoT 平台设备接入;

参数

product_key

参数含义:阿里云 IoT 平台为产品分配的唯一标识符;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:必须与设备在阿里云控制台注册时所属产品的 ProductKey 完全一致;
参数示例:-- 添加 ProductKey 为 a1B2c3D4e5F;
         product_key = "a1B2c3D4e5F"

device_name

参数含义:设备在所属产品下的唯一名称;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:必须与设备在阿里云控制台对应产品下创建的 DeviceName 一致;
参数示例:-- 添加 DeviceName 为 sensor_001;
         device_name = "sensor_001"

device_secret

参数含义:设备密钥,用于生成接入密码(password)的签名密钥;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:属于设备私钥,严禁泄露;
参数示例:-- 添加 DeviceSecret 为 Y877Bgo8X5owd3lcB5wWDjryNPoB;
         device_secret = "Y877Bgo8X5owd3lcB5wWDjryNPoB"

method

参数含义:签名所使用的哈希算法类型;
数据类型:string
取值范围:"hmacmd5"  "hmacsha1"  "hmacsha256"
是否必选:可选传入此参数(默认为 "hmacmd5");
注意事项:无;
参数示例:-- 指定签名所使用的哈希算法类型为 hmacsha256;
         method = "hmacsha256"

cur_timestamp

参数含义:用于签名的时间戳(单位:秒);
数据类型:number
取值范围:Unix 时间戳(秒);
是否必选:可选传入此参数(默认为 32472115200,对应 2999-01-01 00:00:00);
注意事项:2999 年距离现在差的很远,默认值设置为 32472115200 可以理解为是人为设定的一个超长有效期;
         如果对时间有严格要求,可以在脚本中调用 os.time 接口获取当前系统时间;
参数示例:-- 指定时间戳为 32472115200;
         cur_timestamp = 32472115200

istls

参数含义:是否使用 TLS 加密直连模式;
数据类型:boolean
取值范围:true  false
是否必选:可选传入此参数(默认为 false);
注意事项:true 表示使用 TLS 直连,client_id  securemode = 2
         false 表示使用 TCP 直连,client_id  securemode = 3
         该参数仅影响 client_id 中的 securemode 字段,不影响 user_name  password 的计算;
参数示例:-- 设置为使用 TLS 直连模式;
         istls = true

返回值

local client_id, user_name, password = iotauth.aliyun(product_key, device_name,device_secret,method,cur_timestamp,istls)

有三个返回值 client_id、user_name、password;

client_id

含义说明:MQTT 客户端标识符;
数值类型:string
取值范围:无特别限制;
注意事项:无;
返回示例:"a1B2c3D4e5F.sensor_001|securemode=2,signmethod=hmacsha256,timestamp=32472115200|"

user_name

含义说明:MQTT 连接用户名;
数值类型:string
取值范围:无特别限制;
注意事项:无;
返回示例:"sensor_001&a1B2c3D4e5F"

password

含义说明:设备接入密码,由三元组和时间戳通过指定 HMAC 算法动态计算得出的十六进制签名值;
数值类型:string
取值范围:无特别限制;
注意事项:每次调用若传入参数不同,输出结果也不会不同;
返回示例:"4A213D09B06C4B3A4C3B03CC5209900DC449F267100D4C39F05F903FE46A209A"

示例

-- 生成阿里云 MQTT 接入参数
local client_id, user_name, password = iotauth.aliyun(
    "a1B2c3D4e5F",
    "sensor_001",
    "Y877Bgo8X5owd3lcB5wWDjryNPoB",
    "hmacsha256",
    32472115200,
    true
)
log.info("aliyun", client_id, user_name, password)

4.2 iotauth.onenet(produt_id, device_name,key,method,cur_timestamp,version)

功能

根据中国移动 OneNet 物联网平台的设备或项目凭证,自动生成用于 MQTT 协议接入 OneNet 平台所需的三个认证参数:client_id、user_name 和 password;

支持 新版 OneNet(产品 ID 为字母数字字符串) 和 旧版 OneNet(产品 ID 为纯数字,使用项目级 AccessKey) 两种接入模式;

注意事项

1. OneNet 平台存在 新旧两个版本,认证逻辑不同;

2. 时间戳 cur_timestamp 参数在当前 LuatOS 实现中默认为 32472115200,无需传入;

参数

produt_id

参数含义:OneNet 平台分配的产品 ID
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:产品 ID 类型决定使用设备密钥还是项目 AccessKey,不可混用;
参数示例:-- 新版:添加 产品 ID 为 Ck2AF9QD2K;
         produt_id = "Ck2AF9QD2K"
         -- 旧版:添加 产品 ID 为 12342334;
         produt_id = "12342334"

device_name

参数含义:设备在产品下的唯一名称;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:无;
参数示例:-- 添加 设备名称 为 test;
         device_name = "test"

key

参数含义:设备密钥(新版)或项目 AccessKey(旧版);
数据类型:string
取值范围:0 ~ 2048;
是否必选:必须传入此参数;
注意事项:属于设备私钥,严禁泄露;;
         新版用设备密钥,旧版用项目级 AccessKey
参数示例:-- 添加设备密钥为 T0s3ZkJEdkIxTnR6YktZRXRZMFpKTnNGblpycGdidFY=;
         key = "T0s3ZkJEdkIxTnR6YktZRXRZMFpKTnNGblpycGdidFY="

method

参数含义:签名所使用的哈希算法类型;
数据类型:string
取值范围:"md5"  "sha1"  "sha256" 
是否必选:可选传入此参数(默认为 "md5");
注意事项:需要与 OneNet 平台控制台中设备或项目的签名算法配置保持一致;
参数示例:-- 配置签名所使用的哈希算法类型为 sha256;
         method = "sha256"

cur_timestamp

参数含义:用于签名的时间戳(单位:秒);
数据类型:number
取值范围:Unix 时间戳(秒);
是否必选:可选传入此参数(默认为 32472115200,对应 2999-01-01 00:00:00);
注意事项:当前 LuatOS 实现中该参数实际未使用,传入无效,可忽略;
参数示例:(无需传入);

version

参数含义:OneNet API 版本号;
数据类型:string
取值范围:0 ~ 2048
是否必选:可选传入此参数(默认为 "2048-10-31");
注意事项:目前 OneNet 平台仅支持 2048-10-31
参数示例:-- 配置 OneNet API 版本号为 2048-10-31;
         version = "2048-10-31"

res

参数含义:资源标识符,仅旧版 OneNet 使用;
数据类型:string
取值范围:0 ~ 2048
是否必选:仅旧版必须传入此参数,新版无需传入;
注意事项:旧版必须传入该参数,且格式要求为 "products/" .. product_id
参数示例:-- 配置资源标识符;
         res = "products/" .. product_id

返回值

local client_id, user_name, password = iotauth.onenet(produt_id, device_name,key,method,cur_timestamp,version,res)

有三个返回值 client_id、user_name、password;

client_id

含义说明:MQTT 客户端标识符;
数值类型:string
取值范围:无特别限制;
注意事项:新版为 device_name
         旧版可能包含额外前缀;
返回示例:"test"

user_name

含义说明:MQTT 连接用户名;
数值类型:string
取值范围:无特别限制;
注意事项:新版为 product_id
         旧版为 access_key 对应的项目标识;
返回示例:"Ck2AF9QD2K"(新版)或 "12342334"(旧版);

password

含义说明:设备接入密码;
数值类型:string
取值范围:无特别限制;
注意事项:每次调用若传入参数不同,输出结果也不会不同;
返回示例:"version=2048-10-31&res=products%2FCk2AF9QD2K%2Fdevices%2Ftest&et=32472115200&method=sha256&sign=7TMn%2FaAfeybZBTPstT%2FxSQUqHokNOVbJ3JpLJR8fz7g%3D"

示例

-- 新版:生成中移OneNet MQTT 接入参数
local client_id, user_name, password = iotauth.onenet(
    "Ck2AF9QD2K",
    "test",
    "T0s3ZkJEdkIxTnR6YktZRXRZMFpKTnNGblpycGdidFY=",
    "sha256",
    32472115200,
    "2048-10-31"
)
log.info("onenet", client_id, user_name, password)

-- 旧版:生成中移OneNet MQTT 接入参数
local client_id, user_name, password = iotauth.onenet(
    "1234567890",
    "test",
    "HwvlJ8X5bwc3swndCWmhSRFV+bdzXxxxxxxT17HTIV8=",
    "sha256",
    32472115200,
    "2048-10-31",
    "products/1234567890"
)
log.info("onenet", client_id, user_name, password)

4.3 iotauth.iotda(device_id,device_secret,cur_timestamp)

功能

根据华为云 IoTDA(IoT Device Access)平台的设备凭证,自动生成用于 MQTT 协议安全接入华为云 IoT 平台所需的三个认证参数:client_id、user_name 和 password;

支持带时间戳校验和不带时间戳校验两种模式,适配华为云设备鉴权规范;

注意事项

1. 华为云 IoTDA 使用 device_id(而非 ProductKey + DeviceName)作为设备唯一标识,格式通常为:node_id + "_" + device_name(如 "6203cc94c7fb24029b110408_88888888");

2. 若传入 cur_timestamp,则启动时间戳校验模式,平台将校验时间有效性;若不传,则使用无时间戳模式;

参数

device_id

参数含义:华为云 IoTDA 平台分配的设备唯一标识符;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:必须与设备在华为云控制台注册的 Device ID 完全一致;
参数示例:-- 添加设备名称为 6203cc94c7fb24029b110408_88888888;
         device_id = "6203cc94c7fb24029b110408_88888888"

device_secret

参数含义:设备密钥;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:属于设备私钥,严禁泄露;
参数示例:-- 添加设备密钥为 123456789;
         device_secret = "123456789"

cur_timestamp

参数含义:用于签名的时间戳(单位:秒);
数据类型:number
取值范围:Unix 时间戳(秒);
是否必选:可选传入此参数;
注意事项:若传入,则启动时间戳校验模式;
         若不传(或传 nil),则使用无时间戳模式;
         秒级 Unix 时间戳要求数据长度通常为 10 位;
参数示例:-- 使用无时间戳模式;
         cur_timestamp = nil
         -- 启动时间戳校验模式;
         cur_timestamp = 32472115200

返回值

local client_id, user_name, password = iotauth.iotda(device_id,device_secret,cur_timestamp)

有三个返回值 client_id、user_name、password;

client_id

含义说明:MQTT 客户端标识符;
数值类型:string
取值范围:无特别限制;
注意事项:无;
返回示例:"6203cc94c7fb24029b110408_88888888_0_0_2999010100"

user_name

含义说明:MQTT 连接用户名;
数值类型:string
取值范围:无特别限制;
注意事项:与 device_id 一致;
返回示例:"6203cc94c7fb24029b110408_88888888"

password

含义说明:设备接入密码;
数值类型:string
取值范围:无特别限制;
注意事项:每次调用若传入参数不同,输出结果也不会不同;
返回示例:"5888ea6f4631ce76d621f452e8823507c36dd68a61f6e08518c8935e280c3c72"

示例

-- 生成华为云 IoTDA MQTT 接入参数(使用无时间戳模式)
local client_id, user_name, password = iotauth.iotda(
    "6203cc94c7fb24029b110408_88888888",
    "123456789"
)
log.info("iotda", client_id, user_name, password)

-- 生成华为云 IoTDA MQTT 接入参数(启动时间戳校验模式)
local client_id, user_name, password = iotauth.iotda(
    "6203cc94c7fb24029b110408_88888888",
    "123456789",
    32472115200
)
log.info("iotda", client_id, user_name, password)

4.4 iotauth.qcloud(product_id, device_name,device_secret,method,cur_timestamp,sdk_appid)

功能

根据腾讯云物联网通信(IoT Explorer)平台的设备三元组,自动生成用于 MQTT 协议安全接入腾讯云 IoT 平台所需的三个认证参数:client_id、user_name 和 password;

支持多种签名算法,并兼容腾讯云设备认证规范;

注意事项

1. 腾讯云使用 product_id + device_name 唯一标识设备,device_secret 用于动态签名;

参数

product_id

参数含义:腾讯云 IoT 平台为产品分配的唯一标识符;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:必须与设备在腾讯云控制台所属产品的 ProductID 完全一致;
参数示例:-- 添加产品ID为 LD8S5J1L07;
         product_id = "LD8S5J1L07"

device_name

参数含义:设备在产品下的唯一名称;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:无;
参数示例:-- 添加设备名称为 test;
         device_name = "test"

device_secret

参数含义:设备密钥;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:属于设备私钥,严禁泄露;
参数示例:-- 添加设备密钥为 acyv3QDJrRa0fW5UE58KnQ==;
         device_secret = "acyv3QDJrRa0fW5UE58KnQ=="

method

参数含义:签名所使用的哈希算法类型;
数据类型:string
取值范围:"sha1"  "sha256"
是否必选:可选传入此参数(默认为 "sha256");
注意事项:无;
参数示例:-- 设置算法类型为 sha256;
         method = "sha256"

cur_timestamp

参数含义:用于签名的时间戳(单位:秒);
数据类型:number
取值范围:Unix 时间戳(秒);
是否必选:可选填入此参数(默认为 32472115200,对应 2999-01-01 00:00:00);
注意事项:2999 年距离现在差的很远,默认值设置为 32472115200 可以理解为是人为设定的一个超长有效期;
         如果对时间有严格要求,可以在脚本中调用 os.time 接口获取当前系统时间;
参数示例:-- 设置时间戳为 32472115200;
         cur_timestamp = 32472115200

sdk_appid

参数含义:腾讯云分配的应用 ID,用于标识腾讯云物联网开发平台的接入服务;
数据类型:string
取值范围:0 ~ 2048
是否必选:可选传入此参数(默认为 "12010126");
注意事项:无;
参数示例:-- 添加应用 ID 为 12010126;
         sdk_appid = "12010126"

返回值

local client_id, user_name, password = iotauth.qcloud(product_id, device_name,device_secret,method,cur_timestamp,sdk_appid)

有三个返回值 client_id、user_name、password;

client_id

含义说明:MQTT 客户端标识符;
数值类型:string
取值范围:无特别限制;
注意事项:无;
返回示例:"LD8S5J1L07test"

user_name

含义说明:MQTT 连接用户名;
数值类型:string
取值范围:无特别限制;
注意事项:由腾讯云规范决定;
返回示例:"LD8S5J1L07test;12010126;bbead;32472115200"

password

含义说明:设备接入密码;
数值类型:string
取值范围:无特别限制;
注意事项:每次调用若传入参数不同,输出结果也不会不同;
返回示例:"bddfa29ccf78a9201f157e70f294dcd9070df7059ebc03486cda72b3c4c29481;hmacsha256"

示例

-- 生成腾讯云 MQTT 接入参数
local client_id, user_name, password = iotauth.qcloud(
    "LD8S5J1L07",
    "test",
    "acyv3QDJrRa0fW5UE58KnQ==",
    "sha256",
    32472115200,
    "12010126"
)
log.info("qcloud", client_id, user_name, password)

4.5 iotauth.tuya(device_id,device_secret,cur_timestamp)

功能

根据涂鸦(Tuya)智能云平台的设备凭证,自动生成用于 MQTT 协议接入涂鸦 IoT 平台所需的三个认证参数:client_id、user_name 和 password;

适用于涂鸦标准设备接入场景,支持带时间戳或固定时间戳的签名模式;

注意事项

1. 涂鸦平台使用 device_id + device_secret 作为设备唯一身份凭证,无需 ProductKey;

参数

device_id

参数含义:涂鸦平台分配的设备唯一标识符;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:必须与设备在涂鸦 IoT 平台注册的 Device ID 完全一致;
参数示例:-- 添加设备 ID 为 6c95875d0f5ba69607nzfl;
         device_id = "6c95875d0f5ba69607nzfl"

device_secret

参数含义:设备密钥;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:属于设备私钥,严禁泄露;
参数示例:-- 添加设备密钥为 fb803786602df760;
         device_secret = "fb803786602df760"

cur_timestamp

参数含义:用于签名的时间戳(单位:秒);
数据类型:number
取值范围:Unix 时间戳(秒);
是否必选:可选传入此参数(默认为 7258089600,对应 2200-01-01 00:00:00);
注意事项:2200 年距离现在差的很远,默认值设置为 7258089600 可以理解为是人为设定的一个超长有效期;
         如果对时间有严格要求,可以在脚本中调用 os.time 接口获取当前系统时间;
参数示例:-- 设置时间戳为 7258089600;
         cur_timestamp = 7258089600

返回值

local client_id, user_name, password = iotauth.tuya(device_id,device_secret,cur_timestamp)

有三个返回值 client_id、user_name、password;

client_id

含义说明:MQTT 客户端标识符;
数值类型:string
取值范围:无特别限制;
注意事项:无;
返回示例:"tuyalink_6c95875d0f5ba69607nzfl"

user_name

含义说明:MQTT 连接用户名;
数值类型:string
取值范围:无特别限制;
注意事项:由涂鸦平台规范决定;
返回示例:"6c95875d0f5ba69607nzfl|signMethod=hmacSha256,timestamp=7258089600,secureMode=1,accessType=1"

password

含义说明:设备接入密码;
数值类型:string
取值范围:无特别限制;
注意事项:每次调用若传入参数不同,输出结果也不会不同;
返回示例:"d4e2d498e4195db3ed213b33d662e3b7bf434dc3d5a1f2e63b602ac9248ba72c"

示例

-- 生成涂鸦 MQTT 接入参数
local client_id, user_name, password = iotauth.tuya(
    "6c95875d0f5ba69607nzfl",
    "fb803786602df760",
    7258089600
)
log.info("tuya", client_id, user_name, password)

4.6 iotauth.baidu(iot_core_id, device_key,device_secret,method,cur_timestamp)

功能

根据百度智能云物联网核心套件(IoT Core)平台的设备凭证,自动生成用于 MQTT 协议安全接入百度 IoT 平台所需的三个认证参数:client_id、user_name 和 password;

支持多种签名算法,并兼容百度云设备动态鉴权规范;

注意事项

1. 百度 IoT 平台使用 iot_core_id + device_key + device_secret 三元组进行设备身份认证;

2. 若传入 cur_timestamp,则启动时间戳校验模式,平台将校验时间有效性;若不传,则使用无时间戳模式;

参数

iot_core_id

参数含义:百度智能云 IoT Core 实例的唯一标识(即“实例 ID”);
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:必须与设备所属的 IoT Core 实例 ID 完全一致;
参数示例:-- 添加实例 ID 为 abcd123;
         iot_core_id = "abcd123"

device_key

参数含义:设备在实例下的唯一名称(即设备 ID);
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:无;
参数示例:-- 添加设备 ID 为 mydevice;
         device_key = "mydevice"

device_secret

参数含义:设备密钥;
数据类型:string
取值范围:0 ~ 2048
是否必选:必须传入此参数;
注意事项:属于设备私钥,严禁泄露;
参数示例:-- 添加设备密钥为 ImSeCrEt0I1M2jkl;
         device_secret = "ImSeCrEt0I1M2jkl"

method

参数含义:签名所使用的哈希算法类型;
数据类型:string
取值范围:"MD5"  "SHA256"
是否必选:可选传入此参数(默认为 "MD5");
注意事项:无;
参数示例:-- 配置算法类型为 SHA256;
         method = "SHA256"

cur_timestamp

参数含义:用于签名的时间戳(单位:秒);
数据类型:number
取值范围:Unix 时间戳(秒);
是否必选:可选传入此参数;
注意事项:若传入,则启动时间戳校验模式;
         若不传(或传 nil),则使用无时间戳模式;
         秒级 Unix 时间戳要求数据长度通常为 10 位;
参数示例:-- 使用无时间戳模式;
         cur_timestamp = nil
         -- 启动时间戳校验模式;
         cur_timestamp = 32472115200

返回值

local client_id, user_name, password = iotauth.baidu(iot_core_id, device_key,device_secret,method,cur_timestamp)

有三个返回值 client_id、user_name、password;

client_id

含义说明:MQTT 客户端标识符;
数值类型:string
取值范围:无特别限制;
注意事项:无;
返回示例:"abcd123"

user_name

含义说明:MQTT 连接用户名;
数值类型:string
取值范围:无特别限制;
注意事项:由百度云规范决定;
返回示例:"thingidp@abcd123|mydevice|32472115200|SHA256"

password

含义说明:设备接入密码;
数值类型:string
取值范围:无特别限制;
注意事项:每次调用若传入参数不同,输出结果也不会不同;
返回示例:"0e2e78921783530a6402f64b4265abbaa4fefb5f5da10af556d0c5b676c52836"

示例

-- 生成百度云 MQTT 接入参数(使用无时间戳模式)
local client_id, user_name, password = iotauth.baidu(
    "abcd123",
    "mydevice",
    "ImSeCrEt0I1M2jkl",
    "SHA256",
)
log.info("baidu", client_id, user_name, password)

-- 生成百度云 MQTT 接入参数(启动时间戳校验模式)
local client_id, user_name, password = iotauth.baidu(
    "abcd123",
    "mydevice",
    "ImSeCrEt0I1M2jkl",
    "SHA256",
    32472115200
)
log.info("baidu", client_id, user_name, password)

五、产品支持说明

支持 LuatOS 开发的所有产品都支持 iotauth 核心库。