全部产品
云市场
云游戏

边缘应用账号权限对接

更新时间:2020-03-05 19:09:37

1.对接目标

1.云端:提供云端的SDK API给到ISV用于管理态的应用权限和人员授权的管理。
2.同步:平台通过云->边同步机制,把云端的应用的权限和人员的授权关系同步到边缘集群。
3.边侧:提供边侧的SDK API给到ISV用于运行态的边侧人员权限校验。

2.接入构造说明

接入方是一个大租户(tenantId)
每个项目是一个隔离(scopeId)
每个项目会有个边缘集群(cluster)
每个边缘集群会有多个应用(application)
权限,人员,权限,空间等应用的数据都是tenantId+scopeId隔离内,云边同步的数据范围也是tenantId+scopeId

3.API接口调用

3.1 云端API

现有云端API文档:https://dev.iot.aliyun.com/api_center 权限管理服务部分。
云端文档

3.1.1 创建权限接口

接口描述

API版本 1.0.1
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) api.link.aliyun.com
路径 /user/rbac/permission/batchcreate

入参说明

入参名称 数据类型 是否必须 入参描述
permissions 复杂对象数组 权限列表,数组数量限制100

具体复杂数组可参照接口文档:创建权限接口

出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appkey = System.getenv("iot.hosting.appKey");
  5. public static final String appSecret = System.getenv("iot.hosting.appSecret");
  6. public static void main(String[] args) throws UnsupportedEncodingException {
  7. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  8. new IoTApiClientBuilderParams();
  9. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  10. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  11. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  12. IoTApiRequest request = new IoTApiRequest();
  13. //设置api的版本
  14. request.setApiVer("0.0.3");
  15. //如果需要登陆,设置当前的会话的token
  16. request.setIotToken("xxxxxxxxxxxxxxx");
  17. // 接口参数
  18. request.putParam("permissions","value1");
  19. //请求参数域名、path、request
  20. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  21. "/user/rbac/permission/batchcreate", request, true);
  22. System.out.println( "response code = " + response.getCode()
  23. + " response = " + new String(response.getBody(), "UTF-8"));
  24. }

返回结果示例 JSON

  1. {
  2. "id": "c996a414-45ce-4010-b9a5-88038342d50a",
  3. "code": 200,
  4. "message": null,
  5. "localizedMsg": null,
  6. "data": ""
  7. }

失败返回结果示例 JSON

  1. {
  2. "id": "5a0e2944-36ad-4a42-97c1-958dd37bfa10",
  3. "code": 500,
  4. "message": "server error.",
  5. "localizedMsg": "server error.",
  6. "data": null
  7. }

3.1.2 创建角色接口

接口描述

API版本 1.0.1
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) api.link.aliyun.com
路径 /user/rbac/role/batchcreate

入参说明

入参名称 数据类型 是否必须 入参描述
roles 复杂对象数组 权限列表,数组数量限制100

具体复杂数组可参照接口文档:创建角色接口

出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appkey = System.getenv("iot.hosting.appKey");
  5. public static final String appSecret = System.getenv("iot.hosting.appSecret");
  6. public static void main(String[] args) throws UnsupportedEncodingException {
  7. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  8. new IoTApiClientBuilderParams();
  9. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  10. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  11. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  12. IoTApiRequest request = new IoTApiRequest();
  13. //设置api的版本
  14. request.setApiVer("0.0.3");
  15. //如果需要登陆,设置当前的会话的token
  16. request.setIotToken("xxxxxxxxxxxxxxx");
  17. // 接口参数
  18. request.putParam("roles","value1");
  19. //请求参数域名、path、request
  20. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  21. "/user/rbac/permission/batchcreate", request, true);
  22. System.out.println( "response code = " + response.getCode()
  23. + " response = " + new String(response.getBody(), "UTF-8"));
  24. }

返回结果示例 JSON

  1. {
  2. "id": "d13e1f27-b24a-4be7-9c5e-b452da6f4430",
  3. "code": 200,
  4. "message": null,
  5. "localizedMsg": null,
  6. "data": ""
  7. }

失败返回结果示例 JSON

  1. {
  2. "id": "5a0e2944-36ad-4a42-97c1-958dd37bfa10",
  3. "code": 500,
  4. "message": "server error.",
  5. "localizedMsg": "server error.",
  6. "data": null
  7. }

3.1.3 删除角色接口

接口描述

API版本 1.0.1
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) api.link.aliyun.com
路径 /user/rbac/role/batchdelete

入参说明

入参名称 数据类型 是否必须 入参描述
roles 复杂对象数组 权限列表,数组数量限制100

具体复杂数组可参照接口文档:删除角色接口

出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appkey = System.getenv("iot.hosting.appKey");
  5. public static final String appSecret = System.getenv("iot.hosting.appSecret");
  6. public static void main(String[] args) throws UnsupportedEncodingException {
  7. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  8. new IoTApiClientBuilderParams();
  9. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  10. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  11. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  12. IoTApiRequest request = new IoTApiRequest();
  13. //设置api的版本
  14. request.setApiVer("0.0.3");
  15. //如果需要登陆,设置当前的会话的token
  16. request.setIotToken("xxxxxxxxxxxxxxx");
  17. // 接口参数
  18. request.putParam("roles","value1");
  19. //请求参数域名、path、request
  20. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  21. "/user/rbac/permission/batchcreate", request, true);
  22. System.out.println( "response code = " + response.getCode()
  23. + " response = " + new String(response.getBody(), "UTF-8"));
  24. }

返回结果示例 JSON

  1. {
  2. "id": "6c8977f8-c31e-46ef-81da-9244759e13c6",
  3. "code": 200,
  4. "message": null,
  5. "localizedMsg": null,
  6. "data": ""
  7. }

失败返回结果示例 JSON

  1. {
  2. "id": "5a0e2944-36ad-4a42-97c1-958dd37bfa10",
  3. "code": 500,
  4. "message": "server error.",
  5. "localizedMsg": "server error.",
  6. "data": null
  7. }

3.1.4 批量给角色关联权限接口

接口描述

API版本 1.0.0
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) api.link.aliyun.com
路径 /user/rbac/role/batchaddpermission

入参说明

入参名称 数据类型 是否必须 入参描述
roles 复杂对象数组 权限列表,数组数量限制100
permissions 复杂对象数组 权限列表,数组数量限制100

具体复杂数组可参照接口文档:批量给角色关联权限接口

出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appkey = System.getenv("iot.hosting.appKey");
  5. public static final String appSecret = System.getenv("iot.hosting.appSecret");
  6. public static void main(String[] args) throws UnsupportedEncodingException {
  7. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  8. new IoTApiClientBuilderParams();
  9. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  10. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  11. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  12. IoTApiRequest request = new IoTApiRequest();
  13. //设置api的版本
  14. request.setApiVer("0.0.3");
  15. //如果需要登陆,设置当前的会话的token
  16. request.setIotToken("xxxxxxxxxxxxxxx");
  17. // 接口参数
  18. request.putParam("roles","value1");
  19. request.putParam("permissions","value2");
  20. //请求参数域名、path、request
  21. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  22. "/user/rbac/permission/batchcreate", request, true);
  23. System.out.println( "response code = " + response.getCode()
  24. + " response = " + new String(response.getBody(), "UTF-8"));
  25. }

返回结果示例 JSON

  1. {
  2. "id": "7a31b6a5-91f8-422c-907e-7434918f5869",
  3. "code": 200,
  4. "message": null,
  5. "localizedMsg": null,
  6. "data": ""
  7. }

失败返回结果示例 JSON

  1. {
  2. "id": "5a0e2944-36ad-4a42-97c1-958dd37bfa10",
  3. "code": 500,
  4. "message": "server error.",
  5. "localizedMsg": "server error.",
  6. "data": null
  7. }

3.1.5 批量移除角色权限接口

接口描述

API版本 1.0.0
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) api.link.aliyun.com
路径 /user/rbac/identity/batchdeletepermission

入参说明

入参名称 数据类型 是否必须 入参描述
permissions 复杂对象数组 权限列表,数组数量限制100
identityId 字符串 统一身份ID

具体复杂数组可参照接口文档:批量从identity移除权限接口

出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appkey = System.getenv("iot.hosting.appKey");
  5. public static final String appSecret = System.getenv("iot.hosting.appSecret");
  6. public static void main(String[] args) throws UnsupportedEncodingException {
  7. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  8. new IoTApiClientBuilderParams();
  9. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  10. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  11. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  12. IoTApiRequest request = new IoTApiRequest();
  13. //设置api的版本
  14. request.setApiVer("0.0.3");
  15. //如果需要登陆,设置当前的会话的token
  16. request.setIotToken("xxxxxxxxxxxxxxx");
  17. // 接口参数
  18. request.putParam("identityId","value1");
  19. request.putParam("permissions","value2");
  20. //请求参数域名、path、request
  21. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  22. "/user/rbac/permission/batchcreate", request, true);
  23. System.out.println( "response code = " + response.getCode()
  24. + " response = " + new String(response.getBody(), "UTF-8"));
  25. }

返回结果示例 JSON

  1. {
  2. "id": "7a31b6a5-91f8-422c-907e-7434918f5869",
  3. "code": 200,
  4. "message": null,
  5. "localizedMsg": null,
  6. "data": ""
  7. }

失败返回结果示例 JSON

  1. {
  2. "id": "5a0e2944-36ad-4a42-97c1-958dd37bfa10",
  3. "code": 500,
  4. "message": "server error.",
  5. "localizedMsg": "server error.",
  6. "data": null
  7. }

3.1.6 批量给identity授予角色接口

接口描述

API版本 1.0.1
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) api.link.aliyun.com
路径 /user/rbac/identity/batchaddrole

入参说明

入参名称 数据类型 是否必须 入参描述
roles 复杂对象数组 权限列表,数组数量限制100
identityId 字符串 统一身份ID

具体复杂数组可参照接口文档:批量给identity授予角色接口

出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appkey = System.getenv("iot.hosting.appKey");
  5. public static final String appSecret = System.getenv("iot.hosting.appSecret");
  6. public static void main(String[] args) throws UnsupportedEncodingException {
  7. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  8. new IoTApiClientBuilderParams();
  9. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  10. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  11. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  12. IoTApiRequest request = new IoTApiRequest();
  13. //设置api的版本
  14. request.setApiVer("0.0.3");
  15. //如果需要登陆,设置当前的会话的token
  16. request.setIotToken("xxxxxxxxxxxxxxx");
  17. // 接口参数
  18. request.putParam("identityId","value1");
  19. request.putParam("roles","value2");
  20. //请求参数域名、path、request
  21. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  22. "/user/rbac/permission/batchcreate", request, true);
  23. System.out.println( "response code = " + response.getCode()
  24. + " response = " + new String(response.getBody(), "UTF-8"));
  25. }

返回结果示例 JSON

  1. {
  2. "id": "7a31b6a5-91f8-422c-907e-7434918f5869",
  3. "code": 200,
  4. "message": null,
  5. "localizedMsg": null,
  6. "data": ""
  7. }

失败返回结果示例 JSON

  1. {
  2. "id": "5a0e2944-36ad-4a42-97c1-958dd37bfa10",
  3. "code": 500,
  4. "message": "server error.",
  5. "localizedMsg": "server error.",
  6. "data": null
  7. }

3.1.7 批量给identity移除角色接口

接口描述

API版本 1.0.1
授权类型 APPSIGN
协议 HTTPS
请求方法 Post
域名(环境变量中获取) api.link.aliyun.com
路径 /user/rbac/identity/batchdeleterole

入参说明

入参名称 数据类型 是否必须 入参描述
roles 复杂对象数组 权限列表,数组数量限制100
identityId 字符串 统一身份ID

具体复杂数组可参照接口文档: 批量从identity移除角色接口

出参列表

出参名称 数据类型 出参描述
code 整形 响应码, 200: 成功
message 字符串 错误消息
localizedMsg 字符串 本地语言错误消息
data 长整型 响应结果 返回的长整型数据是增加的数据的id

请求示例

  1. /**
  2. * 系统环境变量中获取的
  3. */
  4. public static final String appkey = System.getenv("iot.hosting.appKey");
  5. public static final String appSecret = System.getenv("iot.hosting.appSecret");
  6. public static void main(String[] args) throws UnsupportedEncodingException {
  7. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  8. new IoTApiClientBuilderParams();
  9. ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
  10. ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
  11. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  12. IoTApiRequest request = new IoTApiRequest();
  13. //设置api的版本
  14. request.setApiVer("0.0.3");
  15. //如果需要登陆,设置当前的会话的token
  16. request.setIotToken("xxxxxxxxxxxxxxx");
  17. // 接口参数
  18. request.putParam("identityId","value1");
  19. request.putParam("roles","value2");
  20. //请求参数域名、path、request
  21. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  22. "/user/rbac/permission/batchcreate", request, true);
  23. System.out.println( "response code = " + response.getCode()
  24. + " response = " + new String(response.getBody(), "UTF-8"));
  25. }

返回结果示例 JSON

  1. {
  2. "id": "7a31b6a5-91f8-422c-907e-7434918f5869",
  3. "code": 200,
  4. "message": null,
  5. "localizedMsg": null,
  6. "data": ""
  7. }

失败返回结果示例 JSON

  1. {
  2. "id": "5a0e2944-36ad-4a42-97c1-958dd37bfa10",
  3. "code": 500,
  4. "message": "server error.",
  5. "localizedMsg": "server error.",
  6. "data": null
  7. }

地产平台通过封装LP云边同步能力,对外开放如下API:
1、获取边缘集群列表
2、数据同步预检查
3、触发数据同步
4、数据同步结果查询

3.2.1接口定义

分页参数会出现在请求参数和返回结果中,用于下文中API调用参照。

  • 在请求参数中代表请求分页的页数(pageNo)和每页的记录数(pageSize);
  • 在响应结果中的页数(pageNo)和每页的记录数(pageSize)与请求参数一致,同时还有total字段代表数据总数。

所有的分页接口除特殊说明外,都遵循下面的约束

参数 类型 备注
pageNo Integer 请求的页码
非必填,默认为1,有效范围 [1, ∞)
pageSize Integer 每页的记录数
非必填,默认为20,有效范围[1,100]

获取集群列表

接口定义
path 版本 是否需要登录
/home/paas/cluster/edge/query 1.0.0

入参
字段 类型 是否必传 备注
pageNo Integer 请求的页码,详细见“分页参数”定义。
pageSize Integer 每页的记录数,详细见“分页参数”定义。

出参
字段 类型 备注
code Integer 返回码
message String 返回信息
data JSONObject
-data ClusterDTOList 分页数据对象列表ClusterDTOList
-pageNo Integer 请求的页码,详细见“分页参数”定义。
-pageSize Integer 请求的页码,详细见“分页参数”定义。
-total Integer 总记录数

分页数据对象ClusterDTOList

id String 集群ID
name String 集群名称
gmtCreate String 集群创建时间
gmtModified String 集群修改时间

示例

请求示例

  1. {
  2. "pageNo":1,
  3. "pageSize":20
  4. }

返回示例

  1. {
  2. "code": 200,
  3. "message": null,
  4. "localizedMsg": null,
  5. "data":{
  6. "pageNo": 1,
  7. "pageSize": 20,
  8. "total": 10,
  9. "data":[{
  10. "id": "xxx",
  11. "name": "cluster01",
  12. "gmtCreate": "2020-03-04 18:00:00",
  13. "gmtModified": "2020-03-04 18:00:00"
  14. }]
  15. }
  16. }

数据同步预检查

接口定义
path 版本 是否需要登录
/home/paas/data/edge/sync/precheck 1.0.0

入参
字段 类型 是否必传 备注
clusterId String 集群ID
opsType String SYNC_DATA - 同步数据
CLEAR_DATA - 清理数据
dataTypeList JSONArray 数据类型列表

出参
字段 类型 备注
code Integer 返回码
message String 返回信息
data String SYNCING - 同步中
NO - 不需要同步
YES - 需要同步

示例

请求示例

  1. {
  2. "clusterId": "xxx",
  3. "opsType": "SYNC_DATA",
  4. "dataTypeList": [
  5. "ACCOUNT",
  6. "SPACE"
  7. "RTPC"
  8. "ALARM"
  9. ]
  10. }

返回示例

  1. {
  2. "code": 200,
  3. "message": null,
  4. "localizedMsg": null,
  5. "data": "XXX"
  6. }

触发数据同步

接口定义
path 版本 是否需要登录
/home/paas/data/edge/sync/dispatch 1.0.0

入参
字段 类型 是否必传 备注
clusterId String 集群ID
opsType String SYNC_DATA - 同步数据
CLEAR_DATA - 清理数据
dataTypeList JSONArray 数据类型列表

出参
字段 类型 备注
code Integer 返回码
message String 返回信息
data String taskGroupId - 任务组ID

示例

请求示例

  1. {
  2. "clusterId": "xxx",
  3. "opsType": "SYNC_DATA",
  4. "dataTypeList": [
  5. "ACCOUNT",
  6. "SPACE"
  7. ]
  8. }

返回示例

  1. {
  2. "code": 200,
  3. "message": null,
  4. "localizedMsg": null,
  5. "data": "XXX"
  6. }

根据数据同步请求查询结果

接口定义
path 版本 是否需要登录
/home/paas/data/edge/sync/query 1.0.0

入参
字段 类型 是否必传 备注
clusterId String 集群ID
opsType String SYNC_DATA - 同步数据
CLEAR_DATA - 清理数据
dataTypeList JSONArray 数据类型列表

出参
字段 类型 备注
code Integer 返回码
message String 返回信息
data JSONObject
-dataSyncStatus String 同步的结果
NONE - 无任务
SYNCING - 同步中
SUCCESS - 同步成功
FAIL - 同步失败
-preCheckResult String 是否需要同步SYNCING - 同步中
NO - 不需要同步
YES - 需要同步
-taskGroupId String 任务组id,便于工单排查

示例

请求示例

  1. {
  2. "clusterId": "xxx",
  3. "opsType": "SYNC_DATA",
  4. "dataTypeList": [
  5. "ACCOUNT",
  6. "SPACE"
  7. ]
  8. }

返回示例

  1. {
  2. "code": 200,
  3. "message": null,
  4. "localizedMsg": null,
  5. "data": {
  6. "dataSyncStatus": "SUCCESS",
  7. "preCheckResult": "NO",
  8. "taskGroupId": "XXX"
  9. }
  10. }

根据任务组查询数据同步结果

接口定义
path 版本 是否需要登录
/home/paas/data/edge/sync/querybytaskgroupid 1.0.0

入参
字段 类型 是否必传 备注
taskGroupId String 任务组ID

出参
字段 类型 备注
code Integer 返回码
message String 返回信息
data String 同步的结果
NONE - 无任务
SYNCING - 同步中
SUCCESS - 同步成功
FAIL - 同步失败

示例

请求示例

  1. {
  2. "clusterId": "xxx",
  3. "opsType": "SYNC_DATA",
  4. "dataTypeList": [
  5. "ACCOUNT",
  6. "SPACE"
  7. ]
  8. }

返回示例

  1. {
  2. "code": 200,
  3. "message": null,
  4. "localizedMsg": null,
  5. "data": "SUCCESS"
  6. }

3.3 边缘端API

变成服务对接,遵循服务模型API对接规范。

3.3.1 API对接规范

请求头

  1. Host: xxxx.com
  2. Date: Mon, 22 Aug 2016 11:21:04 GMT
  3. User-Agent: Apache-HttpClient/4.1.2 (java 1.6)
  4. Content-Type: application/json; charset=utf-8
  5. //请求体类型,请根据实际请求体内容设置。
  6. Accept: application/json
  7. //请求响应体类型,部分 API 可以根据指定的响应类型来返回对应数据格式,建议手动指定此请求头,如果不设置,部分 HTTP 客户端会设置默认值 */*,导致签名错误。
  8. X-Ca-Request-Mode: debug
  9. //是否开启 Debug 模式,大小写不敏感,不设置默认关闭,一般 API 调试阶段可以打开此设置。
  10. X-Ca-Signature-Headers: X-Ca-Request-Mode,X-Ca-Version,X-Ca-Stage,X-Ca-Key,X-Ca-Timestamp
  11. //参与签名的自定义请求头,服务端将根据此配置读取请求头进行签名,此处设置不包含 Content-Type、Accept、Content-MD5、Date 请求头,这些请求头已经包含在了基础的签名结构中,详情参照请求签名说明文档。
  12. X-Ca-Key: 6002****
  13. //请求的 AppKey
  14. X-Ca-Timestamp: 147186486****
  15. //请求的时间戳,值为当前时间的毫秒数,也就是从1970年1月1日起至今的时间转换为毫秒,时间戳有效时间为15分钟。
  16. X-Ca-Nonce:b931bc77-645a-4299-b24b-f3669be5****
  17. //请求唯一标识,15分钟内 AppKey+API+Nonce 不能重复,与时间戳结合使用才能起到防重放作用。
  18. X-Ca-Signature: FJleSrCYPGCU7dMlLTG+UD3Bc5Elh3TV3CWHtSKh1Ys=
  19. //请求签名。

响应状态码

  1. 400
  2. //响应状态码,大于等于200小于300表示成功;大于等于400小于500为客户端错误;大于500为服务端错误。

响应头

  1. Content-Type: application/json; charset=utf-8
  2. //响应体类型,请根据实际请求体内容设置
  3. X-Ca-Error-Message: Invalid Url
  4. //主要处理应用容器非业务异常的错误信息处理
  5. X-Ca-Debug-Info: {"ServiceLatency":0}
  6. //当打开 Debug 模式后会返回 Debug 信息,此信息后期可能会有变更,仅用做联调阶段参考

请求Body部分

协议
一级属性 数据类型 是否必填 描述
id 字符串 一次请求的标识,该标识由请求发起者生成并且维护
version 字符串 协议版本号
request 对象 由服务提供者确定
params 不限 请求参数,类型包括但不限于对象、数组等

request 属性
参数 是否必填 参数描述
apiVer API版本
language 国际化扩展,语言。
locale 国际化扩展,地理位置、ip。

API示例

  1. ## API 名称 删除人脸模型
  2. ## 名称:DeleteModel
  3. ## 路径:/facade/model/delete
  4. ## 版本:1.0.0
  5. ## 请求参数
  6. {
  7. "request": {
  8. "apiVer": "1.0.0"
  9. },
  10. "id": "BRC-155193021****",
  11. "params": {
  12. "modelId": "d80c6c551cee4d78beb3f8259a3feba4"
  13. },
  14. "version": "1.0"
  15. }
  1. ## 返回示例
  2. {
  3. "id": "BRC-155193021****",
  4. "code": 200,
  5. "data": 2,
  6. "message": ""
  7. }

代码请求示例:

  1. public static void main(String[] args) throws UnsupportedEncodingException {
  2. IoTApiClientBuilderParams ioTApiClientBuilderParams =
  3. new IoTApiClientBuilderParams();
  4. ioTApiClientBuilderParams.setAppKey("28282004");
  5. ioTApiClientBuilderParams.setAppSecret("dcbab9388216c6479b69906565d28f93");
  6. SyncApiClient syncClient = new SyncApiClient(ioTApiClientBuilderParams);
  7. String path = "/app/user/info/get";
  8. IoTApiRequest request = new IoTApiRequest();
  9. request.setApiVer("1.0.0");
  10. Map<String, Object> params = new HashMap<>(4);
  11. // 接口参数
  12. params.put("appId", "4febf37ae01048509cc8136f3ad19926");
  13. params.put("tenantSubUserId", "");
  14. params.put("userId", "2088954581022991");
  15. request.setParams(params);
  16. request.setVersion("1.0");
  17. //请求参数域名、pathrequest
  18. ApiResponse response = syncClient.postBody("api.link.aliyun.com",
  19. path, request, true);
  20. System.out.println("response code = " + response.getCode()
  21. + " response = " + new String(response.getBody(), "UTF-8"));

3.3.2 权限校验

API 权限验证
名称:authenIdentityPerm
路径:/user/rbac/identity/authenperm
版本:1.0.0

请求参数

  1. {
  2. "request": {
  3. "apiVer": "1.0.0"
  4. },
  5. "id": "BRC-155193021****",
  6. "params": {
  7. "identityId":"身份ID",
  8. "actionCode":"资源操作-比如应用权限",
  9. "resCode":"资源ID-比如应用ID"
  10. },
  11. "version": "1.0"
  12. }

返回示例

  1. {
  2. "id": "BRC-155193021****",
  3. "code": 200, #响应码, 200: 成功
  4. "message": "", #错误消息
  5. "data": **true** #是否有权限
  6. }

3.3.3 查询账号所有权限

API 权限验证
名称:queryIdentityAllPermission
路径:/user/rbac/identity/queryallpermission
版本:1.0.0

请求参数

  1. {
  2. "request": {
  3. "apiVer": "1.0.0"
  4. },
  5. "id": "BRC-155193021****",
  6. "params": {
  7. "identityId":"身份ID"
  8. },
  9. "version": "1.0"
  10. }

返回示例

  1. {
  2. "id": "1718af5d-5528-4cc6-b0c5-eba636444091",
  3. "code": 200,
  4. "message": **null**,
  5. "localizedMsg": **null**,
  6. "data": [
  7. {
  8. "actionCode": "open",
  9. "actionDesc": "开",
  10. "cronExpression": "* * * ? * 1-5 *",
  11. "effectiveTime": 155801997****,
  12. "expireTime": 155802357****,
  13. "bizTag1": "标签A",
  14. "bizTag2": "标签B",
  15. "bizTag3": **null**,
  16. "permissionDesc": "备注",
  17. "permissionName": "园区正门开门权限",
  18. "resCode": "park_door",
  19. "resDesc": "园区正门"
  20. }
  21. ]
  22. }

4.登录查看账号进行登录。

4.1 查看账号

单击账号管理>新建账号,添加“集群用户”(用户名、密码、手机号),其中,手机号必填且唯一,并提示用户,手机号是系统之间免登的凭据,如下图所示:
24

4.2 进行登录

登录成功后,可以查看到该账号对应的权限。(主要是运维管理中应用管理和主机监控的权限)25
单击运维管理>主机监控 可查看该集群下,已激活的主机资源配置详情,如下图所示:
26