
# 生成Token
#### 功能介绍
应用服务器可调用此接口[生成Token](https://support.huaweicloud.com/api-ocsmartcampus/ocsmartcampus_06_0008.html)。
Token作为接口认证和鉴权凭据，应用服务器调用平台业务接口时，必须携带Token，通常填写在头域 X-Auth-Token 中，常与头域 X-Instance-Id 配合使用。
Token生成后在有效期内有效。如用户角色发生变更，则此前为该用户生成的Token将会因被吊销而不可用。Token被吊销后，需调用本接口以签发出新的Token，应用服务器需使用新Token调用平台业务接口。
#### URI
POST /v1/iotfm/auth/tokens
#### 请求参数
表1请求Header参数 
| 参数            | 是否必选 | 参数类型   | 描述                                                                                                                                                      |
|:---|:---|:---|:---|
| X-Instance-Id | 是    | String | **参数说明**：实例ID。通过访问智能设施云平台界面后获取，智能设施云平台资源均为实例级隔离，所有业务接口必须填写正确的实例ID才能被成功调用。 **取值范围**：长度8-36，只允许大小写字母、数字和-字符的组合。 |
   
表2请求Body参数 
| 参数   | 是否必选 | 参数类型                                                                                             | 描述             |
|:---|:---|:---|:---|
| auth | 否    | [InstanceAuth] object | **参数说明**：认证信息。 |
   
 表3InstanceAuth 
| 参数       | 是否必选 | 参数类型                                                                                                     | 描述             |
|:---|:---|:---|:---|
| identity | 否    | [InstanceIdentity] object | **参数说明**：认证参数。 |
   
 表4InstanceIdentity 
| 参数       | 是否必选 | 参数类型                                                                                                     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| methods  | 否    | Array of strings                                                                                         | **参数说明**：获取token的方式。当前仅支持密码方式。 **取值范围**：选用如下三种方式之一： - password：密码方式；   - access_key：AK方式；   - assume_role：委托方式。    |
| password | 否    | [InstancePassword] object | **参数说明**：密码信息，获取token方式为password时，此参数必选。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
 表5InstancePassword 
| 参数   | 是否必选 | 参数类型                                                                                             | 描述           |
|:---|:---|:---|:---|
| user | 否    | [InstanceUser] object | **参数说明**：用户。 |
   
 表6InstanceUser 
| 参数       | 是否必选 | 参数类型   | 描述                                                                      |
|:---|:---|:---|:---|
| id       | 否    | String | **参数说明**：用户ID。 **取值范围**：长度1-64。 |
| name     | 否    | String | **参数说明**：用户名。 **取值范围**：长度1-64。 |
| password | 否    | String | **参数说明**：密码。 **取值范围**：长度1-64。   |
   
#### 响应参数
**状态码：201**
表7响应Header参数 
| 参数              | 参数类型   | 描述                  |
|:---|:---|:---|
| X-Subject-Token | String | **参数说明**：签名后的token。 |
   
表8响应Body参数 
| 参数    | 参数类型                                                                                                | 描述                                                                          |
|:---|:---|:---|
| token | [InstanceToken] object | **参数说明**：Token结构体。 **取值范围**：长度1-64。 |
   
 表9InstanceToken 
| 参数         | 参数类型                                                                                                    | 描述                                                                                                            |
|:---|:---|:---|
| issued_at  | String                                                                                                  | **参数说明**：token颁发时间，格式为yyyy-MM-dd'T'HH:mm:ss.SSS'Z'。 **取值范围**：长度1-64。 |
| expires_at | String                                                                                                  | **参数说明**：token过期时间，格式为yyyy-MM-dd'T'HH:mm:ss.SSS'Z'。 **取值范围**：长度1-64。   |
| methods    | Array of strings                                                                                        | **参数说明**：获取token的方式。 **取值范围**：长度固定为1。                                 |
| roles      | Array of [Role] objects             | **参数说明**：角色列表。 **取值范围**：长度1-32。                                      |
| user       | [InstanceUserRsp] object | 用户                                                                                                            |
   
 表10Role 
| 参数   | 参数类型   | 描述                                                                                   |
|:---|:---|:---|
| id   | String | **参数说明**：权限ID。默认显示为0，非真实权限ID。 **取值范围**：长度1-64。 |
| name | String | **参数说明**：权限名称。 **取值范围**：长度1-64。               |
   
 表11InstanceUserRsp 
| 参数                  | 参数类型   | 描述                                                                                                                           |
|:---|:---|:---|
| id                  | String | **参数说明**：用户ID。 **取值范围**：长度1-64。                                                       |
| name                | String | **参数说明**：用户名。 **取值范围**：长度1-64。                                                       |
| password_expires_at | String | **参数说明**：密码过期时间（UTC时间），""表示密码不过期，格式为yyyy-MM-dd'T'HH:mm:ss.SSS'Z'。 **取值范围**：长度1-64。 |
   
#### 请求示例
```
POST https://{endpoint}/v1/iotfm/auth/tokens
{
  "auth" : {
    "identity" : {
      "password" : {
        "user" : {
          "name" : "example_user",
          "password" : "xxxxxx"
        }
      },
      "methods" : [ "password" ]
    }
  }
}
```
#### 响应示例
**状态码：201**
Created
```
{
  "token" : {
    "issued_at" : "2021-03-04T07:33:22.504Z",
    "expires_at" : "2021-03-05T07:33:22.504Z",
    "methods" : [ "password" ],
    "roles" : [ {
      "id" : "0",
      "name" : "te_admin"
    } ],
    "user" : {
      "id" : "43f76c518877464da16dc25a18cae71a",
      "name" : "example_user",
      "password_expires_at" : ""
    }
  }
}
```
#### 状态码
| 状态码 | 描述                    |
|:---|:---|
| 201 | Created               |
| 400 | Bad Request           |
| 401 | Unauthorized          |
| 403 | Forbidden             |
| 404 | Not Found             |
| 500 | Internal Server Error |
   
