
# 设备连接鉴权
#### 接口说明
IoT平台设备侧支持MQTT协议的connect消息接口，鉴权通过后建立设备与平台间的MQTT连接。
#### 参数说明
设备通过MQTT协议的connect消息进行鉴权，对于构造ClientId的各个部分信息都必须包括进去，平台收到connect消息时，会判断设备的鉴权类型和密码摘要算法。
- 当采用"HMACSHA256"校验时间戳方式时，会先校验消息时间戳与平台时间是否一致，再判断密码是否正确。
- 当采用"HMACSHA256"不校验时间戳方式时，鉴权消息也必须带时间戳，但不检验时间是否准确，仅判断密码是否正确。
connect消息鉴权失败时，平台会返回错误，并自动断开MQTT链路。
![](https://support.huaweicloud.com/devg-ocsmartcampus/public_sys-resources/note_3.0-zh-cn.png)
访问[参数生成工具](https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/)，填写注册设备后生成的设备ID（device_id）和密钥（secret），生成设备连接鉴权所需的参数（ClientId、Username、Password）。
| 参数       | 是否必选 | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| ClientId | 是    | String | **参数解释：** 一机一密的设备ClientId由4个部分组成：设备ID、设备身份标识类型、密码签名类型、时间戳，通过下划线"_"分隔。 - **设备ID**：指设备在平台成功注册后生成的唯一设备标识，通常由设备的产品ID和设备的NodeId通过分隔符"_"拼装而来。  - **设备身份标识类型**：固定值为0，表示设备ID。  - **密码签名类型** ：长度1字节，当前支持2种类型： - "0"代表HMACSHA256不校验时间戳。  - "1"代表HMACSHA256校验时间戳。    - **时间戳**：为设备连接平台时的UTC时间，格式为YYYYMMDDHH，如UTC 时间2018/7/24 17:56:20 则应表示为2018072417。   **取值范围**： 长度不超过256。 |
| UserName | 是    | String | **参数解释**： UserName在此处即为设备ID（device_id）。 **取值范围：** 长度不超过256。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Password | 是    | String | **参数解释**： Password是使用了"HMACSHA256"算法，以secret为内容，时间戳（格式为：YYYYMMDDHH）为密钥，进行加密后获取的值（secret为注册设备时平台返回的secret）。Password = hmacsha256("secret", "时间戳")。 当设备认证类型使用密钥认证接入（SECRET）需填写"Password"，X.509证书认证接入（CERTIFICATES）不需填写"Password"。 "HMACSHA256"即使用SHA-256生成哈希值的HMAC算法，生成的哈希值通用一个长度为64位的十六进制字符串来表示。例如，设备密码为：12345678；时间戳为：2025041401；那么，HMACSHA256后的值为："c75150e6cb841417396819e4d2ee4358a416344a03a083e3a8567074ddec820a"。 **取值范围：** 长度不超过256。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   
#### 原生MQTT协议接入建链返回码
原生MQTT协议设备和平台建链时，常见返回码如下：
| 返回码  | 返回码描述           | 原因                              |
|:---|:---|:---|
| 0x00 | 连接成功。           | 连接成功。                           |
| 0x01 | 请求拒绝，协议版本错误。    | 服务器不支持客户端请求MQTT协议版本。            |
| 0x02 | 请求拒绝，无效的客户端标识符。 | clientId不符合格式要求或者心跳时间间隔不满足平台要求。 |
| 0x03 | 请求拒绝，服务器不可用。    | 平台服务不可用。                        |
| 0x04 | 请求拒绝，用户名或密码错误。  | 用户名或密码错误。                       |
| 0x05 | 请求拒绝，没有授权。      | 客户端没有权限连接。                      |
   
