基于数据签名的OpenApi模块.用于对外提供接口.
::: tip 注意
本功能仅在专业版中提供.
:::

创建客户端

进入平台:[系统设置]-[OpenApi客户端]
点击新建按钮:
新建客户端
填写对应的内容保存.
::: tip 注意
clientIdsecureKey需要提供给客户端开发者.
用户名和密码是系统统一的用户主体,会自动创建到用户管理中.使用此用户名密码也能登录到系统中.
与其他用户相同,可以将用户绑定到机构实现数据权限控制.
:::

赋权

点击操作列中的赋权按钮对客户端进行赋权.大部分情况下只需要勾选: 设备操作API设备数据API权限即可.
::: tip 注意
此赋权操作实际上是对OpenAPI客户端对应对用户主体进行赋权.
:::

验证流程

流程
::: tip 说明

  1. 图中Signature函数为客户端设置的签名方式,支持MD5Sha256.
  2. 发起请求的签名信息都需要放到请求头中,而不是请求体.
  3. OpenApi对开发是透明的,开发只需要关心权限控制即可.OpenAPI和后台接口使用的是相同的权限控制API.
    因此开发一个OpenAPI接口就是写一个WebFlux Controller. 查看使用方式

:::

签名

平台使用签名来校验客户端请求的完整性以及合法性.
例:
ClientId为testId,
SecureKey为:testSecure.
客户端请求接口: /api/v1/device/dev0001/log/_query,参数为pageSize=20&pageIndex=0,签名方式为md5.

  1. 将参数key按ascii排序得到: pageIndex=0&pageSize=20
  2. 使用拼接时间戳以及密钥得到: pageIndex=0&pageSize=201574993804802testSecure
  3. 使用md5("pageIndex=0&pageSize=201574993804802testSecure")得到837fe7fa29e7a5e4852d447578269523

最终发起http请求为:

  1. GET /api/device?pageIndex=0&pageSize=20
  2. X-Client-Id: testId
  3. X-Timestamp: 1574993804802
  4. X-Sign: 837fe7fa29e7a5e4852d447578269523

响应结果:

HTTP/1.1 200 OK
X-Timestamp: 1574994269075
X-Sign: c23faa3c46784ada64423a8bba433f25

{"status":200,result:[]}

验签

使用和签名相同的算法(不需要对响应结果排序):


String secureKey = ...; //密钥
String responseBody = ...;//服务端响应结果
String timestampHeader = ...;//响应头: X-Timestamp
String signHeader = ...; //响应头: X-Sign

String sign = DigestUtils.md5Hex(responseBody+timestampHeader+secureKey);
if(sign.equalsIgnoreCase(signHeader)){
    //验签通过

}