
# 获取联邦认证token(OpenID Connect ID token方式) - CreateTokenWithIdToken
#### 功能介绍
该接口可以用于通过OpenID Connect ID token方式获取联邦认证token。
推荐您只通过该接口获取unscoped token，再使用unscoped token通过接口[获取联邦用户的临时访问密钥和securitytoken](https://support.huaweicloud.com/api-iam/iam_04_0003.html)获取临时访问密钥和securitytoken，后续使用获取到的临时访问密钥和securitytoken作为凭证访问云服务。
该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见：[地区和终端节点](https://developer.huaweicloud.com/endpoint?IAM)。
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/IAM/doc?api=CreateTokenWithIdToken)中调试该接口。
#### 授权信息
当前API调用无需策略权限。
#### URI
POST /v3.0/OS-AUTH/id-token/tokens
#### 请求参数
表1请求Header参数 
| 参数       | 是否必选 | 参数类型   | 描述       |
|:---|:---|:---|:---|
| X-Idp-Id | 是    | String | 身份提供商ID。 |
   
表2请求Body参数 
| 参数                                       | 是否必选 | 参数类型   | 描述          |
|:---|:---|:---|:---|
| [auth] | 是    | object | 请求auth参数详情。 |
   
 表3GetIdTokenAuthParams 
| 参数                                            | 是否必选 | 参数类型   | 描述                                                 |
|:---|:---|:---|:---|
| [id_token] | 是    | object | 请求id token参数详情。                                    |
| [scope]   | 否    | object | 请求scope参数详情，限制获取token的权限范围。不传此字段，获取unscoped token。 |
   
 表4GetIdTokenIdTokenBody 
| 参数 | 是否必选 | 参数类型   | 描述                                                                |
|:---|:---|:---|:---|
| id | 是    | String | id_token的值。id_token由企业IdP构建，携带联邦用户身份信息。请参考企业IdP文档了解获取id_token的方法。 |
   
 表5GetIdTokenIdScopeBody 
| 参数                                          | 是否必选 | 参数类型   | 描述                          |
|:---|:---|:---|:---|
| [domain]  | 否    | object | domain scope详情，与project二选一。 |
| [project] | 否    | object | project scope详情，与domain二选一。 |
   
 表6GetIdTokenScopeDomainOrProjectBody 
| 参数   | 是否必选 | 参数类型   | 描述                                     |
|:---|:---|:---|:---|
| id   | 否    | String | domain id或者project id，与name字段至少存在一个。   |
| name | 否    | String | domain name或者project name，与id字段至少存在一个。 |
   
#### 响应参数
**状态码为 201** **时:**
表7响应Header参数 
| 参数              | 参数类型   | 描述         |
|:---|:---|:---|
| X-Subject-Token | String | 签名后的Token。 |
   
表8响应Body参数 
| 参数                                          | 参数类型   | 描述          |
|:---|:---|:---|
| [token] | object | 获取的token详情。 |
   
 表9token 
| 参数                                           | 参数类型             | 描述                                                                                                                                                                                                                       |
|:---|:---|:---|
| 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。 |
| methods                                      | Array of strings | 获取token的方式，联邦用户默认为mapped。                                                                                                                                                                                                |
| issued_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。    |
| [user]       | object           | 用户详情。                                                                                                                                                                                                                    |
| [domain] | object           | 租户详情。                                                                                                                                                                                                                    |
| [project] | object           | 项目详情，仅请求scope为project时，返回此对象。                                                                                                                                                                                            |
| [roles]      | Array of objects | 角色/策略详情。                                                                                                                                                                                                                 |
| [catalog] | Array of objects | catalog详情。                                                                                                                                                                                                               |
   
 表10token.user 
| 参数                                                | 参数类型   | 描述          |
|:---|:---|:---|
| [OS-FEDERATION] | object | 联邦用户user详情。 |
| [domain]         | object | 租户详情。       |
| id                                                | String | 用户id。       |
| name                                              | String | 用户名。        |
   
 表11token.user.OS-FEDERATION 
| 参数                                                    | 参数类型             | 描述       |
|:---|:---|:---|
| [identity_provider] | object           | 身份提供商详情。 |
| [protocol]          | object           | 协议详情。    |
| [groups]           | Array of objects | 用户组详情。   |
   
 表12token.user.OS-FEDERATION.identity_provider 
| 参数 | 参数类型   | 描述       |
|:---|:---|:---|
| id | String | 身份提供商id。 |
   
 表13token.user.OS-FEDERATION.protocol 
| 参数 | 参数类型   | 描述    |
|:---|:---|:---|
| id | String | 协议id。 |
   
 表14token.user.OS-FEDERATION.groups 
| 参数   | 参数类型   | 描述     |
|:---|:---|:---|
| id   | String | 用户组id。 |
| name | String | 用户组名。  |
   
 表15token.user.domain 
| 参数   | 参数类型   | 描述    |
|:---|:---|:---|
| id   | String | 租户id。 |
| name | String | 租户名。  |
   
 表16token.domain 
| 参数   | 参数类型   | 描述    |
|:---|:---|:---|
| id   | String | 租户id。 |
| name | String | 租户名。  |
   
 表17token.project 
| 参数                                         | 参数类型   | 描述    |
|:---|:---|:---|
| [domain] | object | 租户详情。 |
| id                                         | String | 项目id。 |
| name                                       | String | 项目名。  |
   
 表18token.project.domain 
| 参数   | 参数类型   | 描述    |
|:---|:---|:---|
| id   | String | 租户id。 |
| name | String | 租户名。  |
   
 表19roles 
| 参数   | 参数类型   | 描述    |
|:---|:---|:---|
| id   | String | 权限id。 |
| name | String | 权限名。  |
   
表20token.catalog 
| 参数                                                                                                 | 参数类型             | 描述       |
|:---|:---|:---|
| [endpoints] | Array of objects | 终端节点。    |
| id                                                                                                 | String           | 服务ID。    |
| name                                                                                               | String           | 服务名称。    |
| type                                                                                               | String           | 该接口所属服务。 |
   
 表21token.catalog.endpoints 
| 参数        | 参数类型   | 描述                                         |
|:---|:---|:---|
| id        | String | 终端节点ID。                                    |
| interface | String | 接口类型，描述接口在该终端节点的可见性。值为"public"，表示该接口为公开接口。 |
| region    | String | 终端节点所属区域。                                  |
| region_id | String | 终端节点所属区域ID。                                |
| url       | String | 终端节点的URL。                                  |
   
 表22CatalogInfo 
| 参数        | 参数类型   | 描述                                         |
|:---|:---|:---|
| id        | String | 终端节点ID。                                    |
| interface | String | 接口类型，描述接口在该终端节点的可见性。值为"public"，表示该接口为公开接口。 |
| region    | String | 终端节点所属区域。                                  |
| region_id | String | 终端节点所属区域ID。                                |
| url       | String | 终端节点的URL。                                  |
   
#### 请求示例
- 获取联邦认证project scoped token
  ```
  POST /v3.0/OS-AUTH/id-token/tokens
  ```
  ```
  { 
     "auth" : { 
       "id_token" : { 
         "id" : "eyJhbGciOiJSU..." 
       }, 
       "scope" : { 
         "project" : { 
           "id" : "46419baef4324...", 
           "name" : "cn-north-1" 
         } 
       } 
     } 
   }
  ```
  
- 获取联邦认证domain scoped token
  ```
  POST /v3.0/OS-AUTH/id-token/tokens
  ```
  ```
  { 
     "auth" : { 
       "id_token" : { 
         "id" : "eyJhbGciOiJSU..." 
       }, 
       "scope" : { 
         "domain" : { 
           "id" : "063bb260a480...", 
           "name" : "IAMDomain" 
         } 
       } 
     } 
   }
  ```
  
- 获取unscoped token
  ```
  POST /v3.0/OS-AUTH/id-token/tokens
  ```
  ```
  { 
     "auth" : { 
       "id_token" : { 
         "id" : "eyJhbGciOiJSU..." 
       } 
     } 
   }
  ```
  
 
#### 响应示例
**状态码为 201** **时:**
创建成功。
```
{ 
  "token" : { 
    "expires_at" : "2018-03-13T03:00:01.168000Z", 
    "methods" : [ "mapped" ], 
    "issued_at" : "2018-03-12T03:00:01.168000Z", 
    "user" : { 
      "OS-FEDERATION" : { 
        "identity_provider" : { 
          "id" : "idptest" 
        }, 
        "protocol" : { 
          "id" : "oidc" 
        }, 
        "groups" : [ { 
          "name" : "admin", 
          "id" : "45a8c8f..." 
        } ] 
      }, 
      "domain" : { 
        "id" : "063bb260a480...", 
        "name" : "IAMDomain" 
      }, 
      "name" : "FederationUser", 
      "id" : "suvmgvUZc4PaCOEc..." 
    } 
  } 
}
```
**状态码为 400** **时:**
参数无效。
```
{ 
  "error_msg" : "Request body is invalid.", 
  "error_code" : "IAM.0011" 
}
```
**状态码为 401** **时:**
认证失败。
```
{ 
  "error_msg" : "The request you have made requires authentication.", 
  "error_code" : "IAM.0001" 
}
```
**状态码为 403** **时:**
没有操作权限。
```
{ 
  "error_msg" : "Policy doesn't allow %(actions)s to be performed.", 
  "error_code" : "IAM.0003" 
}
```
**状态码为 404** **时:**
未找到相应的资源。
```
{ 
  "error_msg" : "Could not find %(target)s: %(target_id)s.", 
  "error_code" : "IAM.0004" 
}
```
**状态码为 500** **时:**
系统内部异常。
```
{ 
  "error_msg" : "An unexpected error prevented the server from fulfilling your request.", 
  "error_code" : "IAM.0006" 
}
```
#### 状态码
| 状态码 | 描述        |
|:---|:---|
| 201 | 创建成功。     |
| 400 | 参数无效。     |
| 401 | 认证失败。     |
| 403 | 没有操作权限。   |
| 404 | 未找到相应的资源。 |
| 500 | 系统内部异常。   |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-iam/iam_02_0006.html)。
