NodeRed 搭建web服务器--②实现与OneNet HTTP数据推送的验证

 本文思路参考了 玖零大壮的视频和公众号文章,在此表示感谢!

物联网开发 第4讲 中移OneNET HTTP推送服务接入

实验环境:1爱快软路由的端口映射和动态域名设置,并可实现外网访问。

                  2 运行NodeRed的ubuntu server 电脑                 

HTTP数据推送官方说明https://open.iot.10086.cn/doc/v5/develop/detail/632

HTTP推送用于实现平台与应用服务器之间的单向数据通信。平台作为客户端,通过HTTP/HTTPS请求方式,将项目下应用及设备数据推送给应用服务器。HTTP推送服务使用流程包括实例创建、实例验证、规则配置、消息推送4个步骤。

点击验证时,平台服务器会向配置的服务器地址发送HTTP GET请求,进行地址有效性验证,请求形式示例如下:

http://url?msg=xxx&nonce=xxx&signature=xxx

携带参数信息包括:

参数

说明

msg

推送的消息内容。实例验证阶段,为平台生成的随机字符串;接收消息阶段,为平台推送的设备或业务消息数据

nonce

平台生成的随机字符串

signature

加密签名,signature结合了创建实例填写的token参数和请求中的msg、nonce参数。

        应用服务器收到请求后,需要通过signature参数字段对请求进行校验。若确认此次GET请求来自OneNET平台,需在响应中原样返回msg参数,实例验证才能通过,否则验证失败,实例配置不生效。signature参数校验方法如下:

(1) 将实例配置时填写的token参数及校验请求中携带的nonce、msg参数拼接得到字符串A,即A = token + nonce + msg

(2) 将字符串A进行md5加密得到字符串B

(3) 将字符串B进行Base64转换,并通过URL Decode计算后得到参数C,将参数C与signature进行对比,相等则表示校验成功,标识请求来于OneNET平台

如果用户不想验证,可选择跳过该过程直接返回msg参数。实例验证通过后,下一步进行消息源(需要推送的数据)的配置。以下说明以明文方式。

下面说明具体验证过程:

新建HTTP推送实例

 

 建好的但没有验证的实例

 NodeRed端web验证服务器的搭建

 点击HTTP推送实例的“验证”,服务器端回收到如下信息:

 OneNet HTTP推送验证失败,是因为服务器端没有返回任何信息,下一部是要实现原样返回msg,但我们要先实现如何提取msg的信息。流图更改如下:

在function节点添加:msg.payload=msg.payload.msg,然后按部署按钮。

 再次在Onenet 验证,查看服务器是否提取了msg信息

 提取msg信息成功,下一步只要返回给OneNet平台msg信息,即可验证成功。流图添加http response 节点即可。

 再次验证,验证成功!

 

完整流图程序。

[
    {
        "id": "8f2bd4c3cffc1451",
        "type": "tab",
        "label": "流程 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "61e8d9d9adc70f05",
        "type": "http in",
        "z": "8f2bd4c3cffc1451",
        "name": "",
        "url": "/node",
        "method": "get",
        "upload": false,
        "swaggerDoc": "",
        "x": 140,
        "y": 140,
        "wires": [
            [
                "8eeceb4c73ac6c7c",
                "be2f1af54fbd56be"
            ]
        ]
    },
    {
        "id": "8eeceb4c73ac6c7c",
        "type": "debug",
        "z": "8f2bd4c3cffc1451",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 330,
        "y": 140,
        "wires": []
    },
    {
        "id": "4b73285128b057b8",
        "type": "debug",
        "z": "8f2bd4c3cffc1451",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 530,
        "y": 220,
        "wires": []
    },
    {
        "id": "be2f1af54fbd56be",
        "type": "function",
        "z": "8f2bd4c3cffc1451",
        "name": "",
        "func": "msg.payload=msg.payload.msg\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 310,
        "y": 220,
        "wires": [
            [
                "4b73285128b057b8",
                "8725eaf423373ace"
            ]
        ]
    },
    {
        "id": "8725eaf423373ace",
        "type": "http response",
        "z": "8f2bd4c3cffc1451",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 530,
        "y": 280,
        "wires": []
    }
]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

armcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值