合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
“应用级”的含义是该access_token可以代表应用的身份来访问服务API,不能够代表用户的身份,无法访问用户个人信息有关的服务API。
在应用级access_token快过期的时候,重新调用该接口获取新的access_token。
| 承载协议 | HTTPS POST |
|---|---|
| 接口方向 | 服务商服务器 -> 华为服务器 |
| 接口URL | https://oauth-login.cloud.huawei.com/oauth2/agent/v1/client-token |
| 数据格式 | 请求:Content-Type: application/json 响应:Content-Type: application/json |
| 参数 | 必选(M)/可选(O) | 类型 | 说明 |
|---|---|---|---|
| grant_type | M | String | 固定为client_credentials。 |
| client_assertion_type | M | String | 固定为 "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"。 |
| client_assertion | M | String | 服务商生成的JWT。 |
其中,client_assertion是一个JSON Web Token(JWT)。
JWT是一个开放标准(RFC 7519),定义了一种安全传输信息的方法,具体请参见jwt.io。
JWT由Header、Payload和Signature三部分拼接组成,三部分中间以“.”号分隔,例如:xxxx.yyyy.zzzz。
服务商可以依据Header中指定算法以及使用创建凭据下载的json文件内密钥ID关联的私钥(即json凭据文件中private_key)进行签名生成JWT。
JWT Header
| 参数 | 必选(M)/可选(O) | 类型 | 说明 |
|---|---|---|---|
| alg | M | String | 算法类型,固定为PS256。 |
| typ | M | String | Token类型,固定为JWT。 |
| kid | M | String | 密钥ID。即json凭据文件中key_id。 |
JWT Payload
| 参数 | 必选(M)/可选(O) | 类型 | 说明 |
|---|---|---|---|
| iss | M | String | 服务商的client_id。 创建第三方平台时由服务商主动创建的服务账号ID,可在第三方管理平台“开发配置 > 开发资料设置”页面中创建/查询,详情请参见获取应用访问凭据。 |
| sub | M | String | 商家的client_id。 |
| aud | M | String | 固定为"https://oauth-login.cloud.huawei.com/oauth2/agent/token"。 |
| iat | M | Integer | 生成时间,linux时间戳。 |
| exp | M | Integer | 过期时间,linux时间戳。 |
POST /oauth2/agent/v1/client-token HTTP/1.1
Host: oauth-login.cloud.huawei.com
x-client-id: 12345000
x-agent-client-id: 12345666
Content-Type: application/json
{
"grant_type": "client_credentials",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"client_assertion": "xxxx.yyyy.zzzz"
} 返回值为JSON格式的字符串,包含参数如下。
| 字段名 | 类型 | 说明 |
|---|---|---|
| access_token | String | 应用级access_token。 |
| token_type | String | 固定值Bearer。 |
| expires_in | Integer | access_token的过期时间,以秒为单位。过期时间默认60分钟。 |
成功:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "CFyJ7eTl8WIxxxxxjk1EA==",
"expires_in": 3600,
"token_type": "Bearer"
} 失败:
失败返回的httpstatus=400,在body中返回错误码和描述,json格式。
例如:
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
{
"error": 20916,
"error_description": "client_assertion jwt signature error"
} | 错误码 | 描述 | 解决方法 |
|---|---|---|
| 20181 | grant_type为空 |
|
| 20182 | grant_type值不正确 | |
| 20001 | 商家client_id为空 | |
| 20002 | 商家client_id格式不对 | |
| 20003 | 商家client_id在系统不存在 | |
| 20900 | 服务商client_id为空 | |
| 20901 | 服务商client_id格式不对 | |
| 20902 | 服务商client_id在系统不存在 | |
| 20903 | 服务商client_id和商家client_id无代理关系 | |
| 20910 | client_assertion_type的值不对 | |
| 20911 | client_assertion没有值 | |
| 20912 | client_assertion的值不满足基本格式校验 | |
| 20913 | client_assertion中iss和请求头x-agent-client-id不一致 | |
| 20914 | client_assertion中sub和请求头x-client-id不一致 | |
| 20915 | client_assertion过期 | |
| 20916 | client_assertion签名校验未通过 | |
| 57301 | ip is overload blocked | 被流控,请排查是否有异常调用 |
| 57300 | ip is in blacklist | |
| 57302 | appid is in blacklist | |
| 57303 | appid is overload blocked | |
| 其他错误码 | 其他错误,服务器内部错误。 |
|