# 从资源凭证提供商处获取 OAuth 2.0 令牌
#### 功能介绍
使用配置的流程返回指定资源的OAuth2.0令牌。
#### URI
POST /v1/oauth2/token
#### 请求参数
表1请求Body参数 
| 参数                                | 是否必选 | 参数类型                 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| custom_parameters                 | 否    | Map\<String,String\> | **参数解释**： 授权请求的附加自定义参数（不会覆盖标准OAuth2参数）。 **约束限制**： 不涉及。 **取值范围**： 键值对，每个值长度为1\~2048个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                               |
| custom_state                      | 否    | String               | **参数解释**： 用于CSRF保护的不透明字符串（在回调URL响应中作为标准state参数返回）。 **约束限制**： 不涉及。 **取值范围**： 长度为1\~4096个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                           |
| force_authentication              | 否    | Boolean              | **参数解释**： 是否发起新的3LO流程，无论现有会话如何。 **约束限制**： 不涉及。 **取值范围**： - true：发起新的3LO流程。   - false：使用现有会话。    **默认取值**： false |
| oauth2_flow                       | 是    | String               | **参数解释**： 要执行的OAuth2流程类型。 **约束限制**： 不涉及。 **取值范围**： - USER_FEDERATION：用户联合流程   - M2M：机器对机器流程    **默认取值**： 不涉及。   |
| resource_credential_provider_name | 是    | String               | **参数解释**： 资源的凭证提供者名称。 **约束限制**： 不涉及。 **取值范围**： 只能由英文字母、数字及"-"、"_"组成，长度为1\~128个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                    |
| resource_oauth2_return_url        | 否    | String               | **参数解释**： 令牌检索后重定向的回调URL（必须为工作负载身份配置）。 **约束限制**： 不涉及。 **取值范围**： 必须以协议开头，长度为1\~2048个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                               |
| scopes                            | 否    | Array of strings     | **参数解释**： 请求的OAuth作用域（粗粒度权限，由rich_authorization_details补充细粒度控制）。 **约束限制**： 不涉及。 **取值范围**： 数组长度范围\[1,50\]，每个值长度为1\~128个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                            |
| session_uri                       | 否    | String               | **参数解释**： 用户认证会话的唯一标识符（跟踪OAuth2流程状态）。 **约束限制**： 不涉及。 **取值范围**： 必须以"urn:ietf:params:oauth:request_uri:"开头，后面跟随字母、数字、"."、"-"、"_"、"\~"组成的字符串，长度为1\~1024个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                             |
| workload_access_token             | 否    | String               | **参数解释**： 请求OAuth2.0令牌的工作负载身份令牌。 **约束限制**： 不涉及。 **取值范围**： 长度为1\~131072个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                           |
   
#### 响应参数
**状态码：200**
表2响应Body参数 
| 参数                | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|
| access_token      | String | **参数解释**： 要使用的OAuth2.0访问令牌（如果请求了rich_authorization_details，则嵌入RAR授权详情声明）。 **取值范围**： 长度为1\~131072个字符。                                                                                                                                                                                                                                                                                                                                                                     |
| authorization_url | String | **参数解释**： 发起授权的URL（当需要用户授权时提供，包含编码的RAR详情以供用户同意）。 **取值范围**： 长度至少为1个字符。                                                                                                                                                                                                                                                                                                                                                                                                    |
| session_status    | String | **参数解释**： 用户授权会话的状态（决定OAuth2流程中的下一步操作）。 **取值范围**： - IN_PROGRESS：进行中   - FAILED：失败    |
| session_uri       | String | **参数解释**： 用户认证会话的唯一标识符（与请求的session_uri匹配）。 **取值范围**： 必须以"urn:ietf:params:oauth:request_uri:"开头，后面跟随字母、数字、"."、"-"、"_"、"\~"组成的字符串，长度为1\~1024个字符。                                                                                                                                                                                                                                                                                                                           |
   
**状态码：400**
表3响应Body参数 
| 参数                            | 参数类型   | 描述                                                                                                                                                                                  |
|:---|:---|:---|
| error_code                    | String | **参数解释**： 错误码。 **取值范围**： 不涉及。                         |
| error_msg                     | String | **参数解释**： 错误信息。 **取值范围**： 不涉及。                        |
| request_id                    | String | **参数解释**： 请求ID。 **取值范围**： 不涉及。                        |
| encoded_authorization_message | String | **参数解释**： 加密后的认证失败信息，可以通过STS5解密接口进行解密。 **取值范围**： 不涉及。 |
   
**状态码：401**
表4响应Body参数 
| 参数                            | 参数类型   | 描述                                                                                                                                                                                  |
|:---|:---|:---|
| error_code                    | String | **参数解释**： 错误码。 **取值范围**： 不涉及。                         |
| error_msg                     | String | **参数解释**： 错误信息。 **取值范围**： 不涉及。                        |
| request_id                    | String | **参数解释**： 请求ID。 **取值范围**： 不涉及。                        |
| encoded_authorization_message | String | **参数解释**： 加密后的认证失败信息，可以通过STS5解密接口进行解密。 **取值范围**： 不涉及。 |
   
**状态码：403**
表5响应Body参数 
| 参数                            | 参数类型   | 描述                                                                                                                                                                                  |
|:---|:---|:---|
| error_code                    | String | **参数解释**： 错误码。 **取值范围**： 不涉及。                         |
| error_msg                     | String | **参数解释**： 错误信息。 **取值范围**： 不涉及。                        |
| request_id                    | String | **参数解释**： 请求ID。 **取值范围**： 不涉及。                        |
| encoded_authorization_message | String | **参数解释**： 加密后的认证失败信息，可以通过STS5解密接口进行解密。 **取值范围**： 不涉及。 |
   
**状态码：404**
表6响应Body参数 
| 参数                            | 参数类型   | 描述                                                                                                                                                                                  |
|:---|:---|:---|
| error_code                    | String | **参数解释**： 错误码。 **取值范围**： 不涉及。                         |
| error_msg                     | String | **参数解释**： 错误信息。 **取值范围**： 不涉及。                        |
| request_id                    | String | **参数解释**： 请求ID。 **取值范围**： 不涉及。                        |
| encoded_authorization_message | String | **参数解释**： 加密后的认证失败信息，可以通过STS5解密接口进行解密。 **取值范围**： 不涉及。 |
   
**状态码：429**
表7响应Body参数 
| 参数                            | 参数类型   | 描述                                                                                                                                                                                  |
|:---|:---|:---|
| error_code                    | String | **参数解释**： 错误码。 **取值范围**： 不涉及。                         |
| error_msg                     | String | **参数解释**： 错误信息。 **取值范围**： 不涉及。                        |
| request_id                    | String | **参数解释**： 请求ID。 **取值范围**： 不涉及。                        |
| encoded_authorization_message | String | **参数解释**： 加密后的认证失败信息，可以通过STS5解密接口进行解密。 **取值范围**： 不涉及。 |
   
**状态码：500**
表8响应Body参数 
| 参数                            | 参数类型   | 描述                                                                                                                                                                                  |
|:---|:---|:---|
| error_code                    | String | **参数解释**： 错误码。 **取值范围**： 不涉及。                         |
| error_msg                     | String | **参数解释**： 错误信息。 **取值范围**： 不涉及。                        |
| request_id                    | String | **参数解释**： 请求ID。 **取值范围**： 不涉及。                        |
| encoded_authorization_message | String | **参数解释**： 加密后的认证失败信息，可以通过STS5解密接口进行解密。 **取值范围**： 不涉及。 |
   
#### 请求示例
从资源凭证提供商获取OAuth2.0令牌。
```
POST https://{endpoint}/v1/oauth2/token
{
  "oauth2_flow" : "USER_FEDERATION",
  "resource_credential_provider_name" : "my-oauth2-provider",
  "resource_oauth2_return_url" : "https://example.com/callback",
  "session_uri" : "urn:ietf:params:oauth:request_uri:abc123"
}
```
#### 响应示例
**状态码：200**
```
{
  "access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "session_status" : "IN_PROGRESS",
  "session_uri" : "urn:ietf:params:oauth:request_uri:abc123"
}
```
#### 状态码
| 状态码 | 描述                            |
|:---|:---|
| 200 | 请求成功（如果请求了RAR声明，则令牌中嵌入RAR声明）。 |
| 400 | 请求体异常（包括无效RAR类型/操作/位置验证）。     |
| 401 | 认证失败。                         |
| 403 | 没有操作权限（包括RAR细粒度授权失败）。         |
| 404 | 未找到相应的资源。                     |
| 429 | 请求过于频繁。                       |
| 500 | 服务端异常。                        |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-agentidentity/ErrorCode.html)。
