# 获取用户的临时访问密钥和securitytoken - CreateTemporaryAccessKeyByToken
#### 功能介绍
该接口可以用于通过token来获取临时AK/SK和securitytoken。临时AK/SK和securitytoken是系统颁发给IAM用户的临时访问令牌，有效期可在15分钟至24小时范围内设置，过期后需要重新获取。临时AK/SK和securitytoken遵循权限最小化原则。
该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见：[地区和终端节点](https://developer.huaweicloud.com/endpoint?IAM)。
使用获取到的临时AK/SK和securitytoken作为凭证访问云服务，临时AK/SK和securitytoken两者必须**同时使用** ，请求头中需要添加"x-security-token"字段，使用方法详情请参考：[使用临时AK/SK做签名](https://support.huaweicloud.com/devg-apisign/api-sign-securetoken.html)。
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/IAM/doc?api=CreateTemporaryAccessKeyByToken)中调试该接口。
#### 授权信息
当前API调用无需策略权限。
#### URI
POST /v3.0/OS-CREDENTIAL/securitytokens
#### 请求参数
表1请求Header参数 
| 参数           | 是否必选 | 参数类型 | 描述                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| Content-Type | 是      | String | 该字段填为"application/json;charset=utf8"。                                                                                                                                                                                                                                                                                    |
| Authorization                      | 否                              | String                         | X-Auth-Token和Authorization二选一，推荐使用Authorization方式，AK/SK签名认证后会生成Authorization Header。更多信息请参考[AK/SK签名认证算法详解](https://support.huaweicloud.com/devg-apisign/api-sign-algorithm.html)。 Authorization和请求Body的[token]参数同时有值的场景，优先取Authorization的值。 |
| X-Auth-Token                      | 否                           | String                        | X-Auth-Token和Authorization二选一，推荐使用Authorization方式。IAM用户Token或联邦用户的Token或委托Token。通过调用[获取IAM用户Token或委托Token](https://support.huaweicloud.com/api-iam/iam_30_0000.html)，在参数X-Subject-Token中可以获取对应的Token。X-Auth-Token和请求Body的[token]参数同时有值的场景，优先取X-Auth-Token的值。            |
   
表2请求Body参数 
| 参数                                                                 | 是否必选 | 参数类型    | 描述      |
|:---|:---|:---|:---|
| [auth] | 是      | Object | 认证信息。 |
   
 表3auth 
| 参数                                                                        | 是否必选 | 参数类型   | 描述     |
|:---|:---|:---|:---|
| [identity] | 是   | Object | 认证参数。 |
   
 表4auth.identity 
| 参数                                                                             | 是否必选 | 参数类型              | 描述                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| methods                                                                       | 是    | Array of strings | 认证方法，该字段内容为\["token"\]。                                                                                                                                                                                                                                                                                                                                                                                                         |
| [token] | 否      | Object          | 临时访问密钥和securitytoken的有效期。                                                                                                                                                                                                                                                                                                                                                                                                       |
| [policy]                                | 否                          | Object                                  | 用户自定义策略的信息，用于限制获取到的临时访问密钥和securitytoken的权限（当前仅OBS服务支持该限制）。 如果填写此参数，则临时访问密钥和securitytoken的权限为：用户或委托具有的权限和policy参数限制的权限交集。policy参数的字符个数不大于2048。 关于IAM策略的格式和语法，请参考：[策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0017.html)。 说明： 仅OBS服务识别临时访问密钥中的policy限制。如果您获取临时访问密钥时设置了policy参数，访问非OBS服务时policy不生效，比如访问ECS服务时，临时访问密钥仅代表用户或委托的权限，不与policy限制取交集。 |
   
 表5auth.identity.policy 
| 参数                                                                                         | 是否必选 | 参数类型                | 描述                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| Version                                                                                    | 是     | String            | 权限版本号，创建自定义策略时，该字段值填为"1.1"。 说明： 1.1：策略。IAM提供的一种细粒度授权的能力，可以精确到具体服务的操作、资源以及请求条件等。                                                                                                |
| [Statement] | 是      | Array of objects | 授权语句，描述自定义策略的具体内容。 说明： 仅OBS服务识别临时访问密钥中的policy限制，此处Statement的参数定义请参考OBS服务《权限配置指南》中的["策略结构\&语法"](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0053.html#section2)。 |
   
 表6auth.identity.token 
| 参数                | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| id                                      | 否                          | String                       | 即token，若请求Header中不传X-Auth-Token，则须填此参数。X-Auth-Token和请求Body的"[token](https://support.huaweicloud.com/api-iam/iam_04_0003.html#iam_04_0003__zh-cn_topic_0221482424_request_Rq4100AuthIdentityToken)"参数同时有值的场景，优先取X-Auth-Token的值。 |
| duration_seconds | 否    | Integer | 临时访问密钥和securitytoken的有效期，时间单位为秒。 取值范围：15分钟 \~ 24小时 ，默认为15分钟。                                                                                                            |
   
#### 响应参数
表7响应Body参数 
| 参数                                                                       | 参数类型   | 描述      |
|:---|:---|:---|
| [credential] | Object | 认证结果信息。 |
   
 表8credential 
| 参数              | 参数类型     | 描述                                                                                                                                                                                                    |
|:---|:---|:---|
| expires_at      | String | AK/SK和securitytoken的过期时间。响应参数为UTC时间格式，北京时间为UTC+8小时。 如返回： ``` "expires_at": "2020-01-08T02:56:19.587000Z" ``` 北京时间：2020-01-08 10:56:19.587 |
| access       | String   | 获取的AK。                                                                                                                                                                                              |
| secret       | String | 获取的SK。                                                                                                                                                                                                |
| securitytoken | String | securitytoken是将所获的AK、SK等信息进行加密后的字符串。                                                                                                                                                                 |
   
#### 请求示例
- 填写"token"参数。包含tokenId（即token）和临时访问密钥和securitytoken的有效期。
  ```
  POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
  ```
  ```
  {
      "auth": {
          "identity": {
              "methods": [
                  "token"
              ],
              "token": {
                  "id": "MIIEIgYJKoZIhvc...",
                  "duration_seconds": 900
              }
          }
      }
  }
  ```
  
- 不填写"token"参数（请求头中需要X-Auth-Token）。
  ```
  POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
  ```
  ```
  {
      "auth": {
          "identity": {
              "methods": [
                  "token"
              ]
          }
      }
  }
  ```
  
- 填写"policy"参数。即用户自定义策略的信息，用于限制获取到的临时访问密钥和securitytoken的权限（当前仅适用限制OBS服务的权限）。如果填写此参数，则临时访问密钥和securitytoken的权限为：原Token具有的权限和policy参数限制的权限交集。示例中 *DomainNameExample* ，表示限制条件值，需要根据实际情况填写。
  ```
  POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
  ```
  ```
  {
    "auth": {
      "identity": {
        "methods": [
          "token"
        ],
        "policy": {
          "Version": "1.1",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "obs:object:GetObject"
              ],
              "Resource": [
                "OBS:*:*:object:*"
              ],
              "Condition": {
                "StringEquals": {
                  "g:DomainName": [
                    "DomainNameExample"                   
                  ]
                }
              }
            }
          ]
        },
        "token": {
          "duration_seconds": 900
        }
      }
    }
  }
  ```
  
 
#### 响应示例
**状态码为 201 时:**
创建成功。
```
{
    "credential": {
        "access": "NZFAT5VNWEJDGZ4PZ...",
        "expires_at": "2020-01-08T03:50:07.574000Z",
        "secret": "riEoWsy3qO0BvgwfkoLVgCUvzgpjBBcvdq...",
        "securitytoken": "gQpjbi1ub3J0aC00jD4Ej..."
    }
}
```
#### 返回值
| 返回值   | 描述         |
|:---|:---|
| 201  | 创建成功。    |
| 400   | 参数无效。       |
| 401 | 认证失败。    |
| 403   | 没有操作权限。 |
| 500   | 内部服务错误。  |
   
#### 错误码
无
