创建设备鉴权模板
功能介绍
应用服务器可调用此接口在物联网平台创建一个设备鉴权模板。
调试
您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。
URI
POST /v5/iot/{project_id}/device-authentication-templates
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
project_id |
是 |
String |
参数说明:项目ID。获取方法请参见 获取项目ID。 |
请求参数
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
X-Auth-Token |
否 |
String |
参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证。 |
Instance-Id |
否 |
String |
参数说明:实例ID。物理多租下各实例的唯一标识,一般华为云租户无需携带该参数,仅在物理多租场景下从管理面访问API时需要携带该参数。您可以在IoTDA管理控制台界面,选择左侧导航栏“总览”页签查看当前实例的ID |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
template_name |
是 |
String |
参数说明:鉴权模板名称。 取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
description |
否 |
String |
参数说明:鉴权模板的描述信息。 取值范围:长度不超过2048,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合 |
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函数中使用。 |
响应参数
状态码:201
参数 |
参数类型 |
描述 |
---|---|---|
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函数中使用。 |
请求示例
创建鉴权模板
POST https://{endpoint}/v5/iot/{project_id}/device-authentication-templates { "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}" ] } } } }
响应示例
状态码:201
Created
{ "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" }
状态码
状态码 |
描述 |
---|---|
201 |
Created |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
500 |
Internal Server Error |
错误码
请参见错误码。