阿里云物联网平台设备接入认证方式

阿里云物联网平台设备接入认证方式

设备接入 - 设备安全认证 - 概述

认证方式可选:

  • 设备密钥(常用)
  • ID2
  • X.509

设备密钥认证

阿里云物联网平台为创建的产品颁布了产品码(ProductKey)和产品密钥(ProductSecret),创建的设备颁布了设备名(DeviceName)和设备密钥(DeviceSecret)。设备通过这个四元组认证接入阿里云平台,根据认证方式的不同,只需使用这个四元组中的一部分。

认证方式有一机一密一型一密预注册一型一密免预注册子设备动态注册。他们之间的区别如下述表格:

对比项 一机一密 一型一密预注册 一型一密免预注册 子设备动态注册
设备端烧录信息 ProductKey、DeviceName、DeviceSecret ProductKey、ProductSecret ProductKey、ProductSecret ProductKey
云端是否需要开启动态注册 无需开启,默认支持。 需打开动态注册开关。 需打开动态注册开关。 需打开动态注册开关。
是否需要提前在物联网平台创建设备,注册DeviceName 需要,产品下DeviceName唯一。 需要,产品下DeviceName唯一。 不需要。 需要,确保产品下DeviceName唯一。
产线烧录要求 逐一烧录设备证书,需确保设备证书的安全性。 批量烧录相同的产品证书,需确保产品证书的安全存储。 批量烧录相同的产品证书,需确保产品证书的安全存储。 网关可以本地获取子设备ProductKey。将子设备ProductKey烧录在网关上。
安全性 较高 一般 一般 一般
是否有配额限制 有,单个产品50万上限。 有,单个产品50万上限。 有,单个产品50万上限。 有,单个网关最多可注册1500个子设备。
其他外部依赖 依赖网关的安全性保障。

设备密钥认证实战

一机一密认证实战

开发环境

  • 64位 ubuntu 服务器
  • python3.6
  • paho mqtt 1.4.0
  • aliyun iot linkkit 1.1.0 (Python)

此处选用的是阿里云 Python 版本的 SDK ,方便我们快速验证功能,环境搭建参考Python SDK - 开发环境设备。

获取 example 示例代码,并放至环境搭建的工作目录。

例程演示

例程里 mqtt_connect_TCP.py 演示了 Python SDK 使用一机一密接入阿里云物联网平台的方式,先把例程跑起来,然后再分析其具体的使用方式。

首先在云端创建产品和设备,我这里为测试LED灯产品和test1设备,获取该设备的设备证书 ProductKey, DeviceName 和 DeviceSecret 。

mqtt_connect_TCP.py 例程里将设备证书填写到相应代码处,其中 host_name 为物联网平台的 Region ID,可在地域和可用区这里找到,我这里为华东 2,查表为 cn-shanghai 。

然后在之前创建的 Python 虚拟环境中运行该程序,

可以在云端看见 test1 设备已经激活并且在线。

例程分析

该 python 例程挺简单的,首先得到了 linkkit 的一个对象,其创建对象的参数就是我们设备的设备证书和 Region ID 。

lk = linkkit.LinkKit(
    host_name="cn-shanghai",
    product_key="xxxxxxx",
    device_name="test1",
    device_secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxx")

之后注册了一系列的回调函数,能根据名称很明显地看出回调的时机。

lk.on_connect = on_connect
lk.on_disconnect = on_disconnect
lk.on_topic_message = on_topic_message
lk.on_subscribe_topic = on_subscribe_topic
lk.on_unsubscribe_topic = on_unsubscribe_topic
lk.on_publish_topic = on_publish_topic

然后配置了 matt 连接的安全模式,就开始建立连接了。

lk.config_mqtt(secure="")
lk.connect_async()

一型一密预注册实战

开发环境

  • 64位 ubuntu 服务器
  • python3.6
  • paho mqtt 1.4.0
  • aliyun iot linkkit 1.1.0 (Python)

此处选用的是阿里云 Python 版本的 SDK ,方便我们快速验证功能,环境搭建参考Python SDK - 开发环境设备。

获取 example 示例代码,并放至环境搭建的工作目录。

例程演示

例程里 dynamic_register.py 演示了 Python SDK 使用一型一密(预注册)接入阿里云物联网平台的方式,先把例程跑起来,然后再分析其具体的使用方式。

首先在云端创建产品和设备,我这里为测试LED灯产品和test2设备。

使用一型一密进行动态注册,需要在云端开启动态注册功能,如下图:

然后将该设备的 product_key, product_secret 和 device_name 写入代码中,注意 device_secret 需保持空。其中 host_name 为物联网平台的 Region ID,可在地域和可用区这里找到,我这里为华东 2,查表为 cn-shanghai 。

然后在之前创建的 Python 虚拟环境中运行该程序,可以发现连接已经建立,

并且在云端可以看见 test2 设备已经激活并且在线。

例程分析

首先也是得到 linkkit 的一个对象,参数为一型一密预注册设备的认证数据,

lk = linkkit.LinkKit(
    host_name="cn-shanghai",
    product_key="xxxxxxxxx",
    device_name="test2",
    device_secret="",
    product_secret="xxxxxxxxxxxxxxxxxxxxxxxx")

然后也是注册了一系列的回调函数,

lk.on_device_dynamic_register = on_device_dynamic_register
lk.on_connect = on_connect
lk.on_disconnect = on_disconnect
lk.on_topic_message = on_topic_message
lk.on_subscribe_topic = on_subscribe_topic
lk.on_unsubscribe_topic = on_unsubscribe_topic
lk.on_publish_topic = on_publish_topic

这里注意下 on_device_dynamic_register 回调函数,设备动态注册成功后 SDK 会回调该函数,

def on_device_dynamic_register(rc, value, userdata):
    if rc == 0:
        print("dynamic register device success, rc:%d, value:%s" % (rc, value))
    else:
        print("dynamic register device fail,rc:%d, value:%s" % (rc, value))

这里的 rc 为动态注册的结果,0 为成功,非 0 为失败。

rc 为 0,则 value 值为成功注册得到的 DeviceSecret,若 rc 为非 0,则 value 值为错误原因,均为字符串。

云平台只会提供一次 DeviceSecret,再次动态注册该设备时就会得到失败的结果,因此需要在本地持久化该 DeviceSecret ,例程里面并没有做持久化的工作,因此再次运行该例程会得到失败的结果,如下图:

最后直接建立连接:

lk.connect_async()

一型一密免预注册

TODO

一型一密免预注册认证必须使用 TLS 加密,否则不能使用。

建议采用设备的MAC地址、IMEI、SN码等作为 DeviceName 进行动态注册,避免 DeviceName 在云端冲突。

子设备动态注册

TODO

你可能感兴趣的:(阿里云物联网平台设备接入认证方式)