物联网设备MQTT主题发布订阅权限校验方法及系统与流程

文档序号:34366945发布日期:2023-06-04 22:28阅读:226来源:国知局
物联网设备MQTT主题发布订阅权限校验方法及系统与流程

本发明涉及iot(internetofthings,物联网)平台,具体涉及一种物联网设备mqtt主题发布订阅权限校验方法及系统。


背景技术:

1、mqtt(消息队列遥测传输)是iso标准(iso/iec prf 20922)下基于发布/订阅范式的消息协议。它工作在tcp/ip协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议;mqtt最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。在通信过程中,mqtt协议中有三种身份:发布者(publish)、代理(broker/服务器)、订阅者(subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器。在工作流程中,一个重要的流程就是broker对消息的发布者和订阅者进行发布订阅的权限校验;众所周知,物联网是在传统互联网基础上延伸和扩展而出的概念,所以对消息发布者和订阅者的权限校验都继承了互联网传统的权限校验方法,先把权点/权限规则存储到数据库,需要校验的时候从数据库查询,然后进行发布订阅权限的校验,进而确定用户是否对特定主题topic是否有相应的发布订阅权限。

2、随着万物互联与国家战略的推动,现有的物联网平台连接了海量的设备和用户,在复杂的业务环境中,用户对设备mqtttopic的发布订阅权限,设备对设备mqtttopic的发布订阅权限点数量都变得非常庞大;在此系统环境下,传统的权限校验方法会出现超大的延迟,甚至是压垮数据库的问题。把全量权限点按传统方式缓存在redis数据库也会因为数据量太大导致数据存储问题。


技术实现思路

1、为此,本发明提供一种物联网设备mqtt主题发布订阅权限校验方法及系统,以解决传统权限点校验出现的浪费空间,无法适用于海量设备、用户权限校验的问题。

2、为了实现上述目的,本发明提供如下技术方案:

3、根据本发明实施例的第一方面,提出一种物联网设备mqtt主题发布订阅权限校验方法,所述方法包括:

4、创建权限数据缓存结构并进行数据初始化存储,所述数据缓存结构包括mqtt主题权限位数据区、用户主题权限位数组以及设备用户权限数组,所述mqtt主题权限位数据区用于将多个mqtt主题进行编码存储,所述用户主题权限位数组用于存储用户对mqtt主题的发布订阅权限标识数据,所述设备用户权限数组用于存储具有设备操作权限的用户id数据;

5、根据用户请求从缓存数据中获取当前用户请求的mqtt主题发布订阅权限数据,并与用户请求所需的权限进行校验,校验一致后再获取对当前请求的设备id具有操作权限的用户id列表,并使用当前请求的用户id与得到的用户id列表进行匹配判断当前用户是否对请求的设备具备操作权限。

6、进一步地,所述数据缓存结构中,具体包括:

7、所述mqtt主题权限位数据区中,数据采用hashmap结构,主题名称作为key,主题编号作为value,将多个mqtt主题进行从0开始递增编码;

8、所述用户主题权限位数组中,数据采用list<string>结构,权限点位数组的每个位置对应用户对当前主题编号的发布订阅权限,每个主题权限由两位bit标识,00标识用户没有此主题的发布订阅权限,01标识用户有发布权限,10标识用户有订阅权限,11标识用户有发布订阅权限;

9、所述设备用户权限数组中,数据采用list<string>结构,用于存放拥有设备操作权限的用户id数据,多个不同的用户用逗号拼接,用户id数据存放到设备id对应的位置。

10、进一步地,创建权限数据缓存结构并进行数据初始化存储,具体包括:

11、读取系统中定义的mqtt主题,将mqtt主题进行从0开始递增编码,将不同主题名称对应的主题编号存入至mqtt主题权限位数据区;

12、根据授权信息对用户所拥有的发布订阅权限进行初始化,用主题权限位即主题编号乘以2确定权限在byte[]数组的下标位置,并根据用户对此主题的权限对byte[]数据下标位置及下一位进行初始化,没有发布订阅权限默认置为00,发布权限对应置为01,订阅权限置为10,有发布订阅权限置为11,初始化完成后,把byte[]数组base64转为string字符串,存储到用户主题权限位数组中用户id对应的下标位置;

13、获取用户拥有操作权限的设备id,将用户id拼接到设备用户权限数组中设备id对应的下标位置,权限数据初始化完成。

14、进一步地,根据用户请求从缓存数据中获取当前用户请求的mqtt主题发布订阅权限数据,并与用户请求所需的权限进行校验,校验一致后再获取对当前请求的设备id具有操作权限的用户id列表,并使用当前请求的用户id与得到的用户id列表进行匹配判断当前用户是否对请求的设备具备操作权限,具体包括:

15、根据用户请求的mqtt主题从mqtt主题权限位数据区中获取主题对应的权限位即主题编号信息;

16、根据请求的用户id从缓存中获取对应下标的用户主题权限位数组,并将string数据转换为byte[];

17、根据获取的主题权限位信息即主题编号乘以2作为下标,获取byte[]对应下标的数据及后面一位的数据,并对获取的两位数据与当前用户请求所述的权限标识数据进行异或操作,如果异或结果为00表明用户对此主题的操作请求是合法的,则进行下一步,如果不匹配则返回无权限,校验结束;

18、根据请求的设备id从设备用户权限数组缓存中获取对应下标的用户数据,使用当前请求的用户id进行匹配,判断当前用户是否对操作设备具备权限,如果有则返回校验成功,否则返回无权限,校验结束。

19、进一步地,所述方法还包括:

20、根据需要更新的主题从缓存中获取主题的权限位信息即主题编号;

21、根据用户id从缓存中获取对应下标的用户主题权限数据,并把string数据转换位byte[],根据主题权限位信息即主题编号乘以2作为下标,修改byte[]对应下标及后一位的数据为00;将修改后的数据转换为base64的string数据,并更新到用户mqtt主题权限位数据区中用户id对应下标位置;

22、根据需要更新的设备id,从设备用户权限数据缓存中获取设备对应的用户数据,并根据需要更新或删除的用户id,把需要更新或删除的数据进行处理,并把处理后的用户数据更新到设备用户权限数据缓存中。

23、根据本发明实施例的第二方面,提出一种物联网设备mqtt主题发布订阅权限校验系统,所述系统包括:

24、权限数据初始化模块,用于创建权限数据缓存结构并进行数据初始化存储,所述数据缓存结构包括mqtt主题权限位数据区、用户主题权限位数组以及设备用户权限数组,所述mqtt主题权限位数据区用于将多个mqtt主题进行编码存储,所述用户主题权限位数组用于存储用户对mqtt主题的发布订阅权限标识数据,所述设备用户权限数组用于存储具有设备操作权限的用户id数据;

25、权限校验模块,用于根据用户请求从缓存数据中获取当前用户请求的mqtt主题发布订阅权限数据,并与用户请求所需的权限进行校验,校验一致后再获取对当前请求的设备id具有操作权限的用户id列表,并使用当前请求的用户id与得到的用户id列表进行匹配判断当前用户是否对请求的设备具备操作权限。

26、进一步地,所述系统还包括:

27、权限更新/删除模块,用于根据需要更新的主题从缓存中获取主题的权限位信息即主题编号;

28、根据用户id从缓存中获取对应下标的用户主题权限数据,并把string数据转换位byte[],根据主题权限位信息修改byte[]对应下标及后一位的数据为00;将修改后的数据转换为base64的string,并更新到用户mqtt主题权限位数据区中用户id对应下标位置;

29、根据需要更新的设备id,从设备用户权限数据缓存中获取设备对应的用户数据,并根据需要更新或删除的用户id,把需要更新或删除的数据进行处理,并把处理后的用户数据更新到设备用户权限数据缓存中。

30、进一步地,所述权限数据初始化模块具体用于:

31、读取系统中定义的mqtt主题,将mqtt主题进行从0开始递增编码,将不同主题名称对应的主题编号存入至mqtt主题权限位数据区;

32、根据授权信息对用户所拥有的发布订阅权限进行初始化,用主题权限位即主题编号乘以2确定权限在byte[]数组的下标位置,并根据用户对此主题的权限对byte[]数据下标位置及下一位进行初始化,没有发布订阅权限默认置为00,发布权限对应置为01,订阅权限置为10,有发布订阅权限置为11,初始化完成后,把byte[]数组base64转为string字符串,存储到用户主题权限位数组中用户id对应的下标位置;

33、获取用户拥有操作权限的设备id,将用户id拼接到设备用户权限数组中设备id对应的下标位置,权限数据初始化完成。

34、进一步地,所述权限校验模块具体用于:

35、根据用户请求的mqtt主题从mqtt主题权限位数据区中获取主题对应的权限位即主题编号信息;

36、根据请求的用户id从缓存中获取对应下标的用户主题权限位数组,并将string数据转换为byte[];

37、根据获取的主题权限位信息即主题编号乘以2作为下标,获取byte[]对应下标的数据及后面一位的数据,并对获取的两位数据与当前用户请求所述的权限标识数据进行异或操作,如果异或结果为00表明用户对此主题的操作请求是合法的,则进行下一步,如果不匹配则返回无权限,校验结束;

38、根据请求的设备id从设备用户权限数组缓存中获取对应下标的用户数据,使用当前请求的用户id进行匹配,判断当前用户是否对操作设备具备权限,如果有则返回校验成功,否则返回无权限,校验结束。

39、根据本发明实施例的第三方面,提出一种计算机存储介质,所述计算机存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于被一种物联网设备mqtt主题发布订阅权限校验系统执行如上任一项所述的方法。

40、本发明具有如下优点:

41、本发明提出的一种物联网设备mqtt主题发布订阅权限校验方法及系统,通过给系统所有的topic进行编号,并以此编号与用户topic权限数据的权限位下标对应;其次使用byte[]来存放用户主题发布订阅权限,并转为string数据进行缓存,使用较小的空间记录了用户对topic的发布订阅权限,并突破传统使用long类型进行权限位校验最多只能存储64个权限位的限制;同时根据系统每个设备只有少数用户拥有操作权限的特点,反向的以设备为索引把有权限的用户id通过字符串拼接存放到设备id为下标的设备用户权限数组中,减少数据存储和加快权限校验。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1