更新时间:2025-09-19 GMT+08:00

修改设备鉴权模板

功能介绍

应用服务器可调用此接口在物联网平台上修改指定设备鉴权模板。

调试

您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。

URI

PUT /v5/iot/{project_id}/device-authentication-templates/{template_id}

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数说明:项目ID。获取方法请参见 获取项目ID

template_id

String

鉴权模板ID

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证

Instance-Id

String

参数说明:实例ID。物理多租下各实例的唯一标识,一般华为云租户无需携带该参数,仅在物理多租场景下从管理面访问API时需要携带该参数。您可以在IoTDA管理控制台界面,选择左侧导航栏“总览”页签查看当前实例的ID

表3 请求Body参数

参数

是否必选

参数类型

描述

description

String

参数说明:鉴权模板的描述信息。

取值范围:长度不超过2048,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合

status

String

参数说明:是否激活该鉴权模板

  • ACTIVE:该鉴权模板为激活状态。

  • INACTIVE:该鉴权模板为停用状态。

template_body

UpdateAuthenticationTemplateBody object

参数说明:只有模板目标状态为INACTIVE状态下才能修改模板内容,鉴权模板详细内容,json格式。

表4 UpdateAuthenticationTemplateBody

参数

是否必选

参数类型

描述

parameters

Object

参数说明:鉴权模板参数,目前平台预置了mqtt协议连接参数中的clientId,username与设备证书中的属性,参数名定义如下:

  • 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 :表示设备原始密钥

resources

UpdateAuthenticationTemplateResource object

更新鉴权模板设备资源详情结构体。

表5 UpdateAuthenticationTemplateResource

参数

是否必选

参数类型

描述

device_id

Object

设备ID,json对象只能使用FunctionDefinition下的函数从parameters中获取设备ID的取值。

timestamp

TimestampResource object

是否校验设备时间戳,若不为空则表示校验,如果设备连接参数(clientId、username)中包含时间戳建议开启校验。开启校验平台会对比设备携带时间戳与平台系统时间,若设备时间戳加一小时小于平台系统时间则校验失败。若想关闭校验则把value属性的值设置为空json:{}

password

Object

mqtt认证密码,该字段只在设备认证方式为密码认证时生效,证书认证时无效,只能使用FunctionDefinition下的函数从parameters中编程密码的生成方式,平台比较函数解析结果与设备mqtt连接时携带的password是否相等,相等则认证通过。函数中必须包含设备原始密钥参数${iotda::device::secret},且只能在hash函数中使用,若想修改清空该字段则设置为空json:{}。

表6 TimestampResource

参数

是否必选

参数类型

描述

type

String

UNIX:表示为Unix时间戳秒级别长整数,FORMAT:表示为特定时间格式,需要在format字段中指定具体格式。

pattern

String

时间日期格式。

value

Object

设备连接时具体时间戳值,可使用FunctionDefinition下的函数编程时间戳的取值,若想关闭时间戳校验则该字段值设置为空json:{}。

响应参数

状态码:200

表7 响应Body参数

参数

参数类型

描述

template_id

String

鉴权模板id

template_name

String

鉴权模板名称

create_time

String

鉴权模板创建的时间。格式:yyyyMMdd'T'HHmmss'Z',如:20151212T121212Z。

update_time

String

鉴权模板最后一次修改的时间。格式:yyyyMMdd'T'HHmmss'Z',如:20151212T121212Z。

description

String

鉴权模板的描述信息

status

String

参数说明:鉴权模板状态

  • ACTIVE:该鉴权模板为激活状态。

  • INACTIVE:该鉴权模板为停用状态。

template_body

AuthenticationTemplateBody object

参数说明:预调配模板详细内容,json格式。

表8 AuthenticationTemplateBody

参数

参数类型

描述

parameters

Object

参数说明:鉴权模板参数,目前平台预置了mqtt协议连接参数中的clientId,username与设备证书中的属性,参数名定义如下:

  • 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 :表示设备原始密钥

resources

AuthenticationTemplateResource object

鉴权模板设备资源详情结构体。

表9 AuthenticationTemplateResource

参数

参数类型

描述

device_id

Object

设备ID,json对象只能使用FunctionDefinition下的函数从parameters中获取设备ID的取值。

timestamp

TimestampResource object

是否校验设备时间戳,若不为空则表示校验,如果设备连接参数(clientId、username)中包含时间戳建议开启校验。开启校验平台会对比设备携带时间戳与平台系统时间,若设备时间戳加一小时小于平台系统时间则校验失败。若想关闭校验则把value属性的值设置为空json:{}

password

Object

mqtt认证密码,该字段只在设备认证方式为密码认证时生效,证书认证时无效,只能使用FunctionDefinition下的函数从parameters中编程密码的生成方式,平台比较函数解析结果与设备mqtt连接时携带的password是否相等,相等则认证通过。函数中必须包含设备原始密钥参数${iotda::device::secret},且只能在hash函数中使用。

表10 TimestampResource

参数

参数类型

描述

type

String

UNIX:表示为Unix时间戳秒级别长整数,FORMAT:表示为特定时间格式,需要在format字段中指定具体格式。

pattern

String

时间日期格式。

value

Object

设备连接时具体时间戳值,可使用FunctionDefinition下的函数编程时间戳的取值,若想关闭时间戳校验则该字段值设置为空json:{}。

请求示例

更新鉴权模板

PUT https://{endpoint}/v5/iot/{project_id}/device-authentication-templates/{template_id}

{
  "description" : "myTemplate",
  "status" : "ACTIVE",
  "template_body" : {
    "parameters" : {
      "iotda::mqtt::client_id" : {
        "type" : "String"
      },
      "iotda::mqtt::username" : {
        "type" : "String"
      },
      "iotda::device::secret" : {
        "type" : "String"
      }
    },
    "resources" : {
      "device_id" : {
        "Fn::SplitSelect" : [ "${iotda::mqtt::username}", "&", 0 ]
      },
      "timestamp" : {
        "type" : "UNIX",
        "value" : {
          "Fn::MathDiv" : [ {
            "Fn::ParseLong" : {
              "Fn::SplitSelect" : [ {
                "Fn::SplitSelect" : [ "${iotda::mqtt::client_id}", "|", 2 ]
              }, "=", 1 ]
            }
          }, 1000 ]
        }
      },
      "password" : {
        "Fn::HmacSHA256" : [ {
          "Fn::Sub" : [ "clientId${clientId}deviceName${deviceName}productKey${productKey}timestamp${timestamp}", {
            "clientId" : {
              "Fn::SplitSelect" : [ "${iotda::mqtt::client_id}", "|", 0 ]
            },
            "deviceName" : {
              "Fn::SplitSelect" : [ "${iotda::mqtt::username}", "&", 0 ]
            },
            "productKey" : {
              "Fn::SplitSelect" : [ "${iotda::mqtt::username}", "&", 1 ]
            },
            "timestamp" : {
              "Fn::SplitSelect" : [ {
                "Fn::SplitSelect" : [ "${iotda::mqtt::client_id}", "|", 2 ]
              }, "=", 1 ]
            }
          } ]
        }, "${iotda::device::secret}" ]
      }
    }
  }
}

响应示例

状态码:200

OK

{
  "template_id" : "5c90fa7d3c4e4405e8525079",
  "template_name" : "myTemplate",
  "description" : "myTemplate",
  "status" : "ACTIVE",
  "template_body" : {
    "parameters" : {
      "iotda::mqtt::client_id" : {
        "type" : "String"
      },
      "iotda::mqtt::username" : {
        "type" : "String"
      },
      "iotda::device::secret" : {
        "type" : "String"
      }
    },
    "resources" : {
      "device_id" : {
        "Fn::SplitSelect" : [ "${iotda::mqtt::username}", "&", 0 ]
      },
      "timestamp" : {
        "type" : "UNIX",
        "value" : {
          "Fn::MathDiv" : [ {
            "Fn::ParseLong" : {
              "Fn::SplitSelect" : [ {
                "Fn::SplitSelect" : [ "${iotda::mqtt::client_id}", "|", 2 ]
              }, "=", 1 ]
            }
          }, 1000 ]
        }
      },
      "password" : {
        "Fn::HmacSHA256" : [ {
          "Fn::Sub" : [ "clientId${clientId}deviceName${deviceName}productKey${productKey}timestamp${timestamp}", {
            "clientId" : {
              "Fn::SplitSelect" : [ "${iotda::mqtt::client_id}", "|", 0 ]
            },
            "deviceName" : {
              "Fn::SplitSelect" : [ "${iotda::mqtt::username}", "&", 0 ]
            },
            "productKey" : {
              "Fn::SplitSelect" : [ "${iotda::mqtt::username}", "&", 1 ]
            },
            "timestamp" : {
              "Fn::SplitSelect" : [ {
                "Fn::SplitSelect" : [ "${iotda::mqtt::client_id}", "|", 2 ]
              }, "=", 1 ]
            }
          } ]
        }, "${iotda::device::secret}" ]
      }
    }
  },
  "create_time" : "20230810T070547Z",
  "update_time" : "20230810T070547Z"
}

状态码

状态码

描述

200

OK

400

Bad Request

403

Forbidden

404

Not Found

500

Internal Server Error

错误码

请参见错误码