
# 设备鉴权
#### 接口说明
设备鉴权接口，鉴权通过后建立设备与平台间才能处理业务连接。鉴权成功后平台返回access_token。调用属性上报、消息上报等其他接口时，都需要携带access_token信息。如果access_token超期，需要重新认证设备获取access_token。如果access_token未超期重复获取access_token，原access_token在未超期前保留30s，30s之后失效。
#### URI
|   请求方法   |      POST       |
|---|---|
| **URI**  | /v5/device-auth |
| **传输协议** | HTTPS           |
   
#### 请求参数
| 名称        | 必选 | 类型      | 位置   | 说明                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|:---|:---|
| device_id | 是  | String  | Body | **参数解释：** 设备ID，用于唯一标识一个设备。在注册设备时直接指定，或者由物联网平台分配获得。由物联网平台分配时，生成规则为"product_id" + "_" + "node_id"拼接而成。 **取值范围** **：** 长度不超过128，只允许字母、数字、下划线（_）、连接符（-）的组合。        |
| sign_type | 是  | Integer | Body | **参数解释：** 密码校验方式: 0 代表HMACSHA256校验时间戳时不会校验消息时间戳与平台时间是否一致，仅判断密码是否正确; 1 代表HMACSHA256校验时间戳时会先校验消息时间戳与平台时间是否一致，再判断密码是否正确。 **取值范围：** 0或1。 |
| timestamp | 是  | String  | Body | **参数解释：** 时间戳：为设备连接平台时的UTC时间，格式为YYYYMMDDHH，如UTC 时间2018/7/24 17:56:20 则应表示为2018072417。 **取值范围：** 固定长度10。                             |
| password  | 是  | String  | Body | **参数解释：** password的值为使用"HMACSHA256"算法以时间戳为密钥，对secret进行加密后的值。secret为注册设备时平台返回的secret。 **取值范围：** 固定长度64。                                                          |
   
#### 响应参数
| 名称           | 类型      | 说明                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| access_token | String  | **参数解释：** 设备token，用于设备鉴权。 **取值范围：** 长度32-256。 |
| expires_in   | Integer | **参数解释：** 鉴权信息的剩余有效时间, 单位：秒。                                                                                                                                                                      |
   
#### 请求示例
```
POST https://{endpoint}/v5/device-auth
Content-Type: application/json
{
  "device_id" : "60a87ffebaccd902c2f1abbb_0001",
  "sign_type" : 0,
  "timestamp" : "2019120219",
  "password" : "******"
}
```
#### 响应示例
Status Code: 200 OK
```
Content-Type: application/json
{
  "access_token" : "******",
  "expires_in" : 86399
}
```
#### 错误码
| HTTP状态码 | HTTP状态码描述    | 错误码          | 错误码描述                                                                 | 错误码中文描述       |
|:---|:---|:---|:---|:---|
| 400     | Bad Request  | IOTDA.000006 | Invalid input data.                                                   | 请求参数不合法       |
| 401     | Unauthorized | IOTDA.000002 | The request is unauthorized.                                          | 鉴权失败          |
| 403     | Forbidden    | IOTDA.021101 | Request reached the maximum rate limit.                               | 请求已经达到限制速率    |
| 403     | Forbidden    | IOTDA.021102 | The request rate has reached the upper limit of the tenant, limit %s. | 请求已经达到租户的限制速率 |
   
