修改设备鉴权模板
功能介绍
应用服务器可调用此接口在物联网平台上修改指定设备鉴权模板。
调试
您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。
URI
PUT /v5/iot/{project_id}/device-authentication-templates/{template_id}
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
|
project_id |
是 |
String |
参数说明:项目ID。获取方法请参见 获取项目ID。 |
|
template_id |
是 |
String |
鉴权模板ID |
请求参数
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
|
X-Auth-Token |
否 |
String |
参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证。 |
|
Instance-Id |
否 |
String |
参数说明:实例ID。物理多租下各实例的唯一标识,一般华为云租户无需携带该参数,仅在物理多租场景下从管理面访问API时需要携带该参数。您可以在IoTDA管理控制台界面,选择左侧导航栏“总览”页签查看当前实例的ID |
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
|
description |
否 |
String |
参数说明:鉴权模板的描述信息。 取值范围:长度不超过2048,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合 |
|
status |
否 |
String |
参数说明:是否激活该鉴权模板
|
|
template_body |
否 |
参数说明:只有模板目标状态为INACTIVE状态下才能修改模板内容,鉴权模板详细内容,json格式。 |
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
|
parameters |
否 |
Object |
参数说明:鉴权模板参数,目前平台预置了mqtt协议连接参数中的clientId,username与设备证书中的属性,参数名定义如下:
|
|
resources |
否 |
更新鉴权模板设备资源详情结构体。 |
|
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
|
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:{}。 |
响应参数
状态码:200
|
参数 |
参数类型 |
描述 |
|---|---|---|
|
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 |
参数说明:鉴权模板状态
|
|
template_body |
AuthenticationTemplateBody object |
参数说明:预调配模板详细内容,json格式。 |
|
参数 |
参数类型 |
描述 |
|---|---|---|
|
parameters |
Object |
参数说明:鉴权模板参数,目前平台预置了mqtt协议连接参数中的clientId,username与设备证书中的属性,参数名定义如下:
|
|
resources |
鉴权模板设备资源详情结构体。 |
|
参数 |
参数类型 |
描述 |
|---|---|---|
|
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函数中使用。 |
请求示例
更新鉴权模板
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 |
错误码
请参见错误码。