更新时间:2024-06-11 GMT+08:00

自定义模板鉴权使用说明

使用说明

图1 自定义模板鉴权流程图

操作步骤

  1. 创建鉴权模板:进入设备接入控制台左侧导航栏,选择设备 > 自定义鉴权,单击“自定义模板”,单击“创建鉴权模板”。本示例演示使用的鉴权模板与系统默认鉴权一致。

    图2 自定义鉴权-创建鉴权模板

    模板整体内容如下:

    {
      "template_name": "system-default-auth",
      "description": "华为云IoTDA系统默认鉴权模板示例",
      "status": "ACTIVE",
      "template_body": {
        "parameters": {
          "iotda::mqtt::client_id": {
            "type": "String"
          },
          "iotda::mqtt::username": {
            "type": "String"
          },
          "iotda::device::secret": {
            "type": "String"
          }
        },
        "resources": {
          "device_id": {
            "Ref": "iotda::mqtt::username"
          },
          "timestamp": {
            "type": "FORMAT",
            "pattern": "yyyyMMddHH",
            "value": {
              "Fn::SubStringAfter": [
                "${iotda::mqtt::client_id}",
                "_0_1_"
              ]
            }
          },
          "password": {
            "Fn::HmacSHA256": [
              "${iotda::device::secret}",
              {
                "Fn::SubStringAfter": [
                  "${iotda::mqtt::client_id}",
                  "_0_1_"
                ]
              }
            ]
          }
        }
      }
    }
    表1 鉴权模板参数信息

    参数

    参数名称

    是否必填

    描述

    template_name

    模板名称

    鉴权模板名称,单个用户下模板名称不能重复,长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。

    description

    描述

    鉴权模板的描述信息,长度不超过2048,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合。

    status

    状态

    是否激活该模板,默认状态为未激活,一个用户下只能有一个已激活状态的模板。

    parameters

    参数

    平台预定义的MQTT连接参数列表,当设备使用密码认证时模板必须包含设备原始密钥参数(iotda::device::secret)。

    平台预定义了如下参数:

    iotda::mqtt::client_id :mqtt连接参数三元组中的Client Id

    iotda::mqtt::username :mqtt连接参数三元组中的User Name

    iotda::certificate::country : 设备证书(国家/地区,C )

    iotda::certificate::organization : 设备证书(组织,O)

    iotda::certificate::organizational_unit : 设备证书(组织单位,OU)

    iotda::certificate::distinguished_name_qualifier : 设备证书(可辨别名称限定符,dnQualifier)

    iotda::certificate::state_name : 设备证书(省市,ST)

    iotda::certificate::common_name : 设备证书(公用名,CN)

    iotda::certificate::serial_number : 设备证书(序列号,serialNumber)

    iotda::device::secret :表示设备原始密钥

    device_id

    设备ID函数

    设备ID取值函数,JSON格式,平台通过解析该函数获取对应设备信息。

    timestamp

    是否开启时间戳校验

    是否校验设备连接信息中的时间戳,如果设备连接参数(clientId、username)中包含时间戳建议开启校验。开启校验平台会对比设备携带时间戳与平台系统时间,若设备时间戳加一小时小于平台系统时间则校验失败。

    type

    时间戳类型

    UNIX:表示时间戳格式为Unix时间戳,长整型,单位秒。

    FORMAT:格式化时间戳类型,比如:2024-03-28 11:47:39、2024/03/28 03:49:13

    pattern

    时间戳格式

    时间格式模板,时间戳类型为FORMAT时必填,具体字符含义如下:

    y:年

    M:月

    d:日

    H:时

    m:分

    s:秒

    S:毫秒

    示例:yyyy-MM-dd HH:mm:ss、yyyy/MM/dd HH:mm:ss

    value

    时间戳取值函数

    开启时间戳校验后必填,设备时间戳获取函数,平台通过执行该函数获取设备建链时的时间戳。

    password

    MQTT密码函数

    密码函数,当设备认证类型为密钥认证时必填,且模板参数中必须包含设备原始密钥参数(iotda::device::secret),当设备为证书认证是可不填。设备认证类型参考注册设备。平台把设备原始密钥等参数填入函数计算结果,若函数结果与设备建链携带的password参数一致则认证通过,否则认证失败。

  2. 选择设备调试模板:单击“调试”选择一个设备进行调试,输入mqtt连接参数后单击“调试”查看调试结果。注意:使用系统标准格式的clientId平台会校验username参数与clientId前缀一致。

    图3 自定义模板-调试

    设备调试成功后单击“激活”启用模板,一旦激活模板所有设备鉴权将使用该模板,且已激活状态下的模板不能修改,后续修改模板建议新创建一个副本模板进行调试,确认无误后进行模板切换。

  3. 使用mqtt.fx工具模拟设备真实建链结果,Broker Address填平台接入地址,选择总览 > 接入信息,端口使用8883端口。

    图4 设备建链