第三方平台使用

    注意

    本功能仅在企业版中提供.

    进入平台:[系统设置]-[第三方平台]

    点击新建按钮:

    填写对应的内容保存.

    注意

    secureKey需要提供给客户端开发者. 用户名和密码是系统统一的用户主体,会自动创建到用户管理中.使用此用户名密码也能登录到系统中. 与其他用户相同,可以将用户绑定到机构实现数据权限控制.

    赋权

    点击操作列中的赋权按钮对第三方平台进行赋权.大部分情况下只需要勾选: 设备操作API设备数据API权限即可.

    注意

    此赋权操作实际上是对第三方平台对应对用户主体进行赋权.

    流程

    说明

    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

    示例:

    响应结果:

    1. HTTP/1.1 200 OK
    2. X-Timestamp: 1574994269075
    3. X-Sign: c23faa3c46784ada64423a8bba433f25
    4. {"status":200,result:[]}
    1. String responseBody = ...;//服务端响应结果
    2. String signHeader = ...; //响应头: X-Sign
    3. String sign = DigestUtils.md5Hex(responseBody+timestampHeader+secureKey);
    4. if(sign.equalsIgnoreCase(signHeader)){
    5. //验签通过
    6. }

    使用token的方式

    通过请求接口/api/v1/token来获取X-Access-Token,之后可以使用此token来发起api请求。

    客户端请求接口/api/v1/token
    请求方式: POST

    此处以获取设备test001详情为例。

    1. GET /api/v1/device/test001/_detail
    2. X-Access-Token: 3bcddb719b01da679b88d07acde2516

    响应结果:

    1. {
    2. "result": {
    3. "id": "test001",
    4. "name": "温控设备0309",
    5. "protocol": "demo-v1",
    6. "transport": "MQTT",
    7. "orgId": "test",
    8. "productId": "1236859833832701952",
    9. "productName": "智能温控",
    10. "deviceType": {
    11. "text": "网关设备",
    12. "value": "gateway"
    13. },
    14. "text": "离线",
    15. "value": "offline"
    16. "address": "/127.0.0.1:36982",
    17. "onlineTime": 1586705515429,
    18. "offlineTime": 1586705507734,
    19. "createTime": 1585809343175,
    20. "registerTime": 1583805253659,
    21. "metadata": "{\"events\":[{\"id\":\"fire_alarm\",\"name\":\"火警报警\",\"expands\":{\"eventType\":\"reportData\",\"level\":\"urgent\"},\"valueType\":{\"type\":\"object\",\"properties\":[{\"id\":\"a_name\",\"name\":\"区域名称\",\"valueType\":{\"type\":\"string\"}},{\"id\":\"b_name\",\"name\":\"建筑名称\",\"valueType\":{\"type\":\"string\"}},{\"id\":\"l_name\",\"name\":\"位置名称\",\"valueType\":{\"type\":\"string\"}}]}}],\"properties\":[{\"id\":\"temperature\",\"name\":\"温度\",\"valueType\":{\"type\":\"float\",\"min\":\"0\",\"max\":\"100\",\"step\":\"0.1\",\"unit\":\"celsiusDegrees\"},\"expands\":{\"readOnly\":\"true\"}}],\"functions\":[{\"id\":\"get-log\",\"name\":\"获取日志\",\"isAsync\":true,\"output\":{\"type\":\"string\",\"expands\":{\"maxLength\":\"2048\"}},\"inputs\":[{\"id\":\"start_date\",\"name\":\"开始日期\",\"valueType\":{\"type\":\"date\",\"dateFormat\":\"yyyy-MM-dd HH:mm:ss\"}},{\"id\":\"end_data\",\"name\":\"结束日期\",\"valueType\":{\"type\":\"date\",\"dateFormat\":\"yyyy-MM-dd HH:mm:ss\"}},{\"id\":\"time\",\"name\":\"分组\",\"valueType\":{\"type\":\"string\"}}]}]}",
    22. "configuration": {
    23. "username": "test",
    24. "password": "test"
    25. },
    26. "tags": []
    27. },
    28. "status": 200,
    29. "code": "success"
    30. }

    Demo中测试包org.jetlinks.demo.openapi下的测试类已测试通过平台已有的openApi接口。
    Demo中使用签名的方式接入。

    OAuth2.0

    平台也支持通过OAuth2.0进行认证,支持: authorization_codeclient_credentials以及refresh_token.

    例如:

    使用token请求接口:

    1. POST /device/instance/_query
    2. Authorization: bearer access_token
    3. {}
    1. POST /device/instance/_query?access_token=access_token