
# 获取IAM用户Token（使用密码）- KeystoneCreateUserTokenByPassword
#### 功能介绍
该接口可以用于通过用户名/密码的方式进行认证来获取IAM用户的Token。Token是系统颁发给IAM用户的访问令牌，承载用户的身份、权限等信息。调用IAM以及其他云服务的接口时，可以使用本接口获取的IAM用户Token进行鉴权。但强烈推荐您使用[AK/SK签名认证方式](https://support.huaweicloud.com/api-iam/iam_02_0510.html#iam_02_0510__section9211058144012)调用API，可以避免因缓存的Token失效导致的API调用失败的问题。
该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见：[地区和终端节点](https://developer.huaweicloud.com/endpoint?IAM)。
在使用本接口前，请先确认当前需要获取Token的身份：
图1不同身份获取Token的方法   
![](https://support.huaweicloud.com/api-iam/zh-cn_image_0000002167918116.png "点击放大")
- **IAM用户获取Token**
  直接按照[请求参数]说明获取Token。
  
- **华为账号获取Token**
  华为账号不支持直接获取账号Token，排查是否为华为账号请参见：[怎么知道当前登录华为云使用的是"华为账号" 还是"华为云账号"？](https://support.huaweicloud.com/account_faq/faq_id_0009.html)
  华为账号获取Token请参见以下步骤：[创建一个IAM用户](https://support.huaweicloud.com/api-iam/iam_08_0015.html)，[授予该用户必要的权限](https://support.huaweicloud.com/usermanual-iam/iam_03_0001.html)，使用创建的IAM用户名和密码，获取IAM用户Token。
  
- **华为云账号获取Token**
  直接按照[请求参数]说明获取Token。
  
- **第三方系统用户获取Token**
  如果您是第三方系统用户，直接使用联邦认证的用户名和密码获取Token，系统会提示密码错误。请先在华为云的登录页面，通过"忘记密码"功能，设置**华为云账号** **密码**。
  
 
通过Postman获取用户Token示例请参见：[如何通过Postman获取用户Token](https://support.huaweicloud.com/iam_faq/iam_01_034.html)。
#### 约束与限制
- Token的有效期为**24小时**。建议进行缓存，避免频繁调用。使用Token前请确保Token离过期有足够的时间，防止调用API的过程中Token过期导致调用API失败。重新获取Token，不影响已有Token有效性。
- 如果在Token有效期内进行如下操作，**当前Token或该账号下Token最长30分钟失效。**
  - 删除/停用IAM用户。
  
  - 修改IAM用户密码、访问密钥。
  
  - IAM用户权限发生变化（如账号欠费无法访问云服务、申请公测通过、IAM用户权限被修改等）。账号欠费、申请或退出公测、账号下任意用户组权限发生变化会导致该账号下所有用户已获取的Token失效。
   
- 使用Token调用云服务API时， 返回"**The token must be updated**"，则Token过期或失效，需要客户端重新获取Token。
- Token是否可以被篡改：Token生成时加入了签名防篡改的机制，Token被修改后无法通过验签，防止Token被伪造。
 
#### 操作视频
<video controls="controls" preload="none" id="object42681058184113" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/iam_video/1635589288825026977.mp4" title="通过API Explorer获取IAM用户Token" poster="https://support.huaweicloud.com/api-iam/zh-cn_image_0000002410575737.jpg" height="340.0000" width="600.0000"></video>
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/IAM/doc?api=KeystoneCreateUserTokenByPassword)中调试该接口。
#### 授权信息
当前API调用无需策略权限。
#### URI
POST /v3/auth/tokens
表1Query参数 
| 参数        | 是否必选 | 参数类型   | 描述                                                     |
|:---|:---|:---|:---|
| nocatalog | 否    | String | 如果设置该参数，返回的响应体中将不显示catalog信息。任何非空字符串都将解释为true，并使该字段生效。 |
   
 #### 请求参数
表2请求Header参数 
| 参数           | 是否必选 | 参数类型   | 描述                                      |
|:---|:---|:---|:---|
| Content-Type | 是    | String | 该字段内容填为"application/json;charset=utf8"。 |
   
表3请求Body参数 
| 参数                                                            | 是否必选 | 参数类型   | 描述    |
|:---|:---|:---|:---|
| [auth] | 是    | Object | 认证信息。 |
   
 表4auth 
| 参数                                                                        | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| [identity] | 是    | Object | 认证参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| [scope]       | 是    | Object | Token的使用范围，取值为project或domain，二选一即可。 说明： - **如果您将scope设置为domain，该Token适用于全局级服务；如果将scope设置为project，该Token适用于项目级服务。**  - **如果您将scope同时设置为project和domain，将以project参数为准，获取到项目级服务的Token。**  - **如果您将scope置空，将获取到全局级服务的Token。建议您按需要填写** **Token使用范围。**   |
   
 表5auth.identity 
| 参数                                                                           | 是否必选 | 参数类型             | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| methods                                                                      | 是    | Array of strings | 认证方法，该字段内容为\["password"\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| [password] | 是    | Object           | IAM用户密码认证信息。 说明： - user.name和user.domain.name可以在界面控制台"我的凭证"中查看，具体获取方法请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。  - 该接口提供了锁定机制用于防止暴力破解，调用时，请确保用户名密码正确，输错一定次数将被锁定。   |
   
 表6auth.identity.password 
| 参数                                                                           | 是否必选 | 参数类型   | 描述                 |
|:---|:---|:---|:---|
| [user] | 是    | Object | 需要获取Token的IAM用户信息。 |
   
 表7auth.identity.password.user 
| 参数                                                                                   | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| [domain] | 是    | Object | IAM用户所属账号信息。了解[账号与IAM用户的关系](https://support.huaweicloud.com/productdesc-iam/iam_01_0023.html#section2)。                                                                                                                                                                                                                                                                                                                                                                                                      |
| name                                                                                 | 是    | String | IAM用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| password                                                                             | 是    | String | IAM用户的登录密码。 说明： - 务必保证密码输入正确，避免获取Token失败。  - 如果您的华为云账号已升级为华为账号，将不支持获取账号Token，建议您为自己创建一个IAM用户，授予该用户必要的权限，获取IAM用户Token。  - 如果您是第三方系统用户，直接使用联邦认证的用户名和密码获取Token，系统会提示密码错误。请在华为云的登录页面，通过"忘记密码"功能，设置**华为云账号** **密码**，并在password中输入新设置的密码。   |
   
 表8auth.identity.password.user.domain 
| 参数   | 是否必选 | 参数类型   | 描述                                                                                                             |
|:---|:---|:---|:---|
| name | 是    | String | IAM用户所属账号名称，获取方式请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。 |
   
 表9auth.scope 
| 参数                                                                           | 是否必选 | 参数类型   | 描述                                                                                                                                                                                          |
|:---|:---|:---|:---|
| [domain]   | 否    | Object | 取值为domain时，表示获取的Token可以作用于全局服务，全局服务不区分项目或区域，如OBS服务。如需了解服务作用范围，请参考**[系统权限](https://support.huaweicloud.com/usermanual-permissions/iam_01_0001.html)**。domain支持id和name，二选一即可，建议选择"domain_id"。 |
| [project] | 否    | Object | 取值为project时，表示获取的Token可以作用于项目级服务，仅能访问指定project下的资源，如ECS服务。如需了解服务作用范围，请参考**[系统权限](https://support.huaweicloud.com/usermanual-permissions/iam_01_0001.html)**。project支持id和name，二选一即可。         |
   
 表10auth.scope.domain 
| 参数   | 是否必选 | 参数类型   | 描述                                                                                                                                                                  |
|:---|:---|:---|:---|
| id   | 否    | String | IAM用户所属账号ID，获取方式请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。当auth.scope选择了domain时，获取的Token可以作用于全局服务，id和name需要二选一。 |
| name | 否    | String | IAM用户所属账号名称，获取方式请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。当auth.scope选择了domain时，获取的Token可以作用于全局服务，id和name需要二选一。 |
   
 表11auth.scope.project 
| 参数   | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| id   | 否    | String | 表示IAM用户所属账号的项目ID，获取方式请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。当auth.scope选择了project时，获取的Token可以作用于项目级服务，id和name需要二选一。每个区域的项目ID有所不同，需要根据业务所在的区域使用对应的项目ID。 |
| name | 否    | String | 表示IAM用户所属账号的项目名称，获取方式请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。当auth.scope选择了project时，获取的Token可以作用于项目级服务，id和name需要二选一。                                    |
   
#### 请求示例
- 获取IAM用户名为"IAMUser"，IAM用户密码为"IAMPassword"，所属租户名为"IAMDomain"，作用范围为项目"cn-north-1"，且返回的响应体中将不显示catalog信息的Token。IAM用户名、所属账号名可以在界面控制台"我的凭证"中查看，具体获取方法请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。
  ```
  POST https://iam.myhuaweicloud.com/v3/auth/tokens?nocatalog=true
  ```
  ```
  {
      "auth": {
          "identity": {
              "methods": [
                  "password"
              ],
              "password": {
                  "user": {
                      "domain": {
                          "name": "IAMDomain"        //IAM用户所属账号名
                      },
                      "name": "IAMUser",             //IAM用户名
                      "password": "IAMPassword"      //IAM用户密码
                  }
              }
          },
          "scope": {
              "project": {
                  "name": "cn-north-1"               //项目名称
              }
          }
      }
  }
  ```
  
- 获取IAM用户名为"IAMUser"，IAM用户密码为"IAMPassword"，所属账号名为"IAMDomain"，作用范围为整个账号的Token。IAM用户名、所属账号名可以在界面控制台"我的凭证"中查看，具体获取方法请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。
  ```
  POST https://iam.myhuaweicloud.com/v3/auth/tokens
  ```
  ```
  {
      "auth": {
          "identity": {
              "methods": [
                  "password"
              ],
              "password": {
                  "user": {
                      "domain": {
                          "name": "IAMDomain"        //IAM用户所属账号名
                      },
                      "name": "IAMUser",             //IAM用户名
                      "password": "IAMPassword"      //IAM用户密码
                  }
              }
          },
          "scope": {
              "domain": {
                  "name": "IAMDomain"        //IAM用户所属账号名
              }
          }
      }
  }
  ```
  
 
#### 响应参数
表12响应Header参数 
| 参数              | 参数类型   | 描述                |
|:---|:---|:---|
| X-Subject-Token | String | 签名后的Token，小于32KB。 |
   
表13响应Body参数 
| 参数                                                                                                                                               | 参数类型   | 描述           |
|:---|:---|:---|
| [token] | Object | 获取到的Token信息。 |
   
表14token 
| 参数                                                                               | 参数类型             | 描述                                                                                                                                                                                                                                                 |
|:---|:---|:---|
| [catalog] | Array of objects | 服务目录信息。                                                                                                                                                                                                                                            |
| [domain]          | Object           | 获取Token的IAM用户所属的账号信息。如果获取Token时请求体中scope参数设置为domain，则返回该字段。                                                                                                                                                                                        |
| expires_at                                                                       | String           | Token过期时间。 说明： UTC时间，格式为YYYY-MM-DDTHH:mm:ss.ssssssZ，日期和时间戳格式参照[ISO-8601](https://www.iso.org/iso-8601-date-and-time-format.html)，如：2023-06-28T08:56:33.710000Z。   |
| issued_at                                                                        | String           | Token下发时间。 说明： UTC时间，格式为YYYY-MM-DDTHH:mm:ss.ssssssZ，日期和时间戳格式参照[ISO-8601](https://www.iso.org/iso-8601-date-and-time-format.html)，如：2023-06-28T08:56:33.710000Z。 |
| methods                                                                          | Array of strings | 获取Token的方式。                                                                                                                                                                                                                                        |
| [project]        | Object           | 获取Token的IAM用户所属账号的项目信息。如果获取Token时请求体中scope参数设置为project，则返回该字段。                                                                                                                                                                                     |
| [roles]     | Array of objects | Token的权限信息。                                                                                                                                                                                                                                        |
| [user]              | Object           | 获取Token的IAM用户信息。                                                                                                                                                                                                                                   |
   
 表15token.catalog 
| 参数                                                                                                 | 参数类型             | 描述       |
|:---|:---|:---|
| [endpoints] | Array of objects | 终端节点。    |
| id                                                                                                 | String           | 服务ID。    |
| name                                                                                               | String           | 服务名称。    |
| type                                                                                               | String           | 该接口所属服务。 |
   
 表16token.catalog.endpoints 
| 参数        | 参数类型   | 描述                                         |
|:---|:---|:---|
| id        | String | 终端节点ID。                                    |
| interface | String | 接口类型，描述接口在该终端节点的可见性。值为"public"，表示该接口为公开接口。 |
| region    | String | 终端节点所属区域。                                  |
| region_id | String | 终端节点所属区域ID。                                |
| url       | String | 终端节点的URL。                                  |
   
 表17token.domain 
| 参数   | 参数类型   | 描述    |
|:---|:---|:---|
| name | String | 账号名称。 |
| id   | String | 账号ID。 |
   
 表18token.project 
| 参数                                                                             | 参数类型   | 描述        |
|:---|:---|:---|
| [domain] | Object | 项目所属账号信息。 |
| id                                                                             | String | 项目ID。     |
| name                                                                           | String | 项目名称。     |
   
 表19token.project.domain 
| 参数   | 参数类型   | 描述    |
|:---|:---|:---|
| id   | String | 账号ID。 |
| name | String | 账号名称。 |
   
 表20token.roles 
| 参数   | 参数类型   | 描述                   |
|:---|:---|:---|
| name | String | 权限名称。                |
| id   | String | 权限ID。默认显示为0，非真实权限ID。 |
   
 表21token.user 
| 参数                                                                          | 参数类型   | 描述                                                                                                                                                                                                                                                        |
|:---|:---|:---|
| name                                                                        | String | IAM用户名。                                                                                                                                                                                                                                                   |
| id                                                                          | String | IAM用户ID。                                                                                                                                                                                                                                                  |
| password_expires_at                                                         | String | 密码过期时间，""表示密码不过期。 说明： UTC时间，格式为YYYY-MM-DDTHH:mm:ss.ssssssZ，日期和时间戳格式参照[ISO-8601](https://www.iso.org/iso-8601-date-and-time-format.html)，如：2023-06-28T08:56:33.710000Z。 |
| [domain] | Object | IAM用户所属的账号信息。                                                                                                                                                                                                                                             |
   
 表22token.user.domain 
| 参数   | 参数类型   | 描述           |
|:---|:---|:---|
| name | String | IAM用户所属账号名称。 |
| id   | String | IAM用户所属账号ID。 |
   
#### 响应示例
**状态码为 201 时:**
创建成功。
- 获取IAM用户名为"IAMUser"，IAM用户密码为"IAMPassword"，所属账号名为"IAMDomain"，作用范围为项目"cn-north-1"，且返回的响应体中将不显示catalog信息的Token。
  ```
  响应Header参数（获取到的Token）：
  X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
  ```
  ```
  响应Body参数：
  {
      "token": {
          "catalog": [],
          "expires_at": "2020-01-04T09:05:22.701000Z",
          "issued_at": "2020-01-03T09:05:22.701000Z",
          "methods": [
              "password"
          ],
          "project": {
              "domain": {
                  "id": "d78cbac186b744899480f25bd022f...",
                  "name": "IAMDomain"
              },
              "id": "aa2d97d7e62c4b7da3ffdfc11551f...",
              "name": "cn-north-1"
          },
          "roles": [
              {
                  "id": "0",
                  "name": "te_admin"
              },
              {
                  "id": "0",
                  "name": "op_gated_Video_Campus"
              }
          ],
          "user": {
              "domain": {
                  "id": "d78cbac186b744899480f25bd022f...",
                  "name": "IAMDomain"
              },
              "id": "7116d09f88fa41908676fdd4b039e...",
              "name": "IAMUser",
              "password_expires_at": ""
          }
      }
  }
  ```
  
- 获取IAM用户名为"IAMUser"，IAM用户密码为"IAMPassword"，所属账号名为"IAMDomain"，作用范围为整个账号的Token。
  ```
  响应Header参数（获取到的Token）：
  X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
  ```
  ```
  响应Body参数：
  {
      "token": {
          "catalog": [
              {
                  "endpoints": [
                      {
                          "id": "33e1cbdd86d34e89a63cf8ad16a5f...",
                          "interface": "public",
                          "region": "*",
                          "region_id": "*",
                          "url": "https://iam.myhuaweicloud.com/v3.0"
                      }
                  ],
                  "id": "100a6a3477f1495286579b819d399...",
                  "name": "iam",
                  "type": "iam"
              },
              {
                  "endpoints": [
                      {
                          "id": "29319cf2052d4e94bcf438b55d143...",
                          "interface": "public",
                          "region": "*",
                          "region_id": "*",
                          "url": "https://bss.sample.domain.com/v1.0"
                      }
                  ],
                  "id": "c6db69fabbd549908adcb861c7e47...",
                  "name": "bssv1",
                  "type": "bssv1"
              }
          ],
          "domain": {
              "id": "d78cbac186b744899480f25bd022f...",
              "name": "IAMDomain"
          },
          "expires_at": "2020-01-04T09:08:49.965000Z",
          "issued_at": "2020-01-03T09:08:49.965000Z",
          "methods": [
              "password"
          ],
          "roles": [
              {
                  "id": "0",
                  "name": "te_admin"
              },
              {
                  "id": "0",
                  "name": "secu_admin"
              },
              {
                  "id": "0",
                  "name": "te_agency"
              }
          ],
          "user": {
              "domain": {
                  "id": "d78cbac186b744899480f25bd022f...",
                  "name": "IAMDomain"
              },
              "id": "7116d09f88fa41908676fdd4b039e...",
              "name": "IAMUser",
              "password_expires_at": ""
          }
      }
  }
  ```
  
**状态码为 400 时:**
参数无效。请排查body体是否符合json语法。
```
{
    "error": {
        "code": 400,
        "message": "The request body is invalid",
        "title": "Bad Request"
    }
}
```
**状态码为 401 时:**
认证失败。
- 如果您是第三方系统用户，直接使用联邦认证的用户名和密码获取Token，系统会提示密码错误。请在华为云的登录页面，通过"忘记密码"功能，设置**华为云账号** **密码**，并在password中输入新设置的密码。
- 如果您的华为云账号已升级为华为账号，直接使用华为账号名和密码获取Token，系统会提示密码错误。建议您为自己创建一个IAM用户，授予该用户必要的权限，获取IAM用户Token。
```
{
    "error": {
        "code": 401,
        "message": "The username or password is wrong.",
        "title": "Unauthorized"
    }
}
```
#### 返回值
| 返回值 | 描述        |
|:---|:---|
| 201 | 创建成功。     |
| 400 | 参数无效。     |
| 401 | 认证失败。     |
| 403 | 没有操作权限。   |
| 404 | 未找到相应的资源。 |
| 500 | 内部服务错误。   |
| 503 | 服务不可用。    |
   
#### 错误码
无
#### 故障处理
- 提示用户名或密码错误：请排查输入的用户名和密码是否正确。用户名密码正确但是仍旧报错，请排查[当前获取Token的账号是否为华为账号](https://support.huaweicloud.com/account_faq/faq_id_0009.html)，华为账号不支持直接获取Token，请新建一个IAM用户并授权，并使用该IAM用户名和密码获取Token。
- 提示没有API访问权限：调用API前，请确保已[开启编程访问](https://support.huaweicloud.com/usermanual-iam/iam_02_0002.html#section0)。
 
#### 相关操作
- 如果您开启了登录保护并设置登录保护为MFA验证，请参考[获取IAM用户Token（使用密码+虚拟MFA）- KeystoneCreateUserTokenByPasswordAndMfa](https://support.huaweicloud.com/api-iam/iam_03_0006.html)获取IAM用户Token。
- 如果需要获取具有Security Administrator权限的Token，请参见：[如何获取Security Administrator权限的Token](https://support.huaweicloud.com/iam_faq/iam_01_0608.html)。
 
