一种基于MQTT的访问认证的方法及设备与流程

文档序号:11156680阅读:518来源:国知局
一种基于MQTT的访问认证的方法及设备与制造工艺

本申请涉及计算机领域,尤其涉及一种基于MQTT的访问认证的方法及设备。



背景技术:

将日常事物连接到互联网技术迅速发展,智慧园区的建设越来越多的满足用户设备的需求。在智慧园区的建设中,MQTT(消息队列遥测传输协议)协议由于优良的设计而成为一个被普遍接受的协议,针对MQTT的认证扩展和安全传输成功必不可少的功能,目前采用的emqtt方案所提供的认证方式依赖于其配置文件,极大的增加了系统的复杂性。

申请内容

本申请的一个目的是提供一种基于MQTT的访问认证的方法及设备,解决现有技术中的认证方式依赖于配置文件,由于配置出错导致的问题。

根据本申请的一个方面,提供了一种在客户端的基于MQTT的访问认证的方法,所述方法包括:

将所述MQTT的客户端的接入认证请求发送至服务端设备;

基于所述服务端设备反馈的接入认证结果向所述服务端设备发送订阅主题认证请求;

基于所述服务端设备反馈的订阅主题认证请求结果将发布消息认证请求发送至所述服务端设备;

基于所述服务端设备反馈的发布消息认证结果与所述服务端设备确定连接。

进一步地,所述客户端包括MQTT设备和MQTT设备拥有用户时,将所述MQTT的客户端的接入认证请求发送至服务端设备,包括:

向所述服务端设备发送所述MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;

接收所述服务端设备为所述MQTT设备分配的唯一标识信息;

基于所述访问密匙、加密密匙和所述唯一标识信息将所述MQTT设备的接入认证请求发送至服务端设备。

进一步地,基于所述服务端设备反馈的接入认证结果向所述服务端设备发送订阅主题认证请求,包括:

基于所述服务端设备反馈的接入认证成功的接入认证结果,所述MQTT设备通过订阅主题的过滤器向所述服务端发送所述订阅主题认证请求,其中,所述订阅主题的过滤器根据所述MQTT设备拥有用户的访问密匙、唯一标识信息及控制消息传输通道确定,

或根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定。

进一步地,基于所述服务端设备反馈的订阅主题认证请求结果将发布消息认证请求发送至所述服务端设备,包括:

基于所述服务端设备反馈的订阅成功的订阅主题认证请求结果,根据报文中确定的主题名将发布消息认证请求发送至所述服务端设备。

进一步地,所述报文中的主题名包括:发布消息的报文中的主题名、回复控制消息的报文中的主题名和回复查询消息的报文中的主题名,

所述方法还包括:

根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及数据消息传输通道确定所述发布消息的报文中的主题名;

根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制回复消息传输通道确定所述回复控制消息的报文中的主题名;

根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询回复消息传输通道确定所述回复查询消息的报文中的主题名。

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

所述报文中的遗嘱消息采用预设的MQTT设备消息字符串,所述遗嘱消息的主题格式根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息和离线消息传输通道确定。

进一步地,所述客户端包括应用程序开发用户授权的MQTT设备及所述MQTT设备拥有用户时,将所述MQTT的客户端的接入认证请求发送至服务端设备,包括:

向所述服务端设备发送所述应用程序、所述应用程序开发用户、所述应用程序开发用户授权的MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;

接收所述服务端设备为所述应用程序和所述MQTT设备分别分配的唯一标识信息;

基于所述访问密匙、加密密匙、所述MQTT设备的唯一标识信息和所述应用程序的唯一标识信息将所述应用程序的接入认证请求发送至服务端设备。

进一步地,基于所述服务端设备反馈的接入认证结果向所述服务端设备发送订阅主题认证请求,包括:

基于所述服务端设备反馈的接入认证成功的接入认证结果,所述应用程序通过订阅主题的过滤器向所述服务端发送所述订阅主题认证请求,

其中,所述订阅主题的过滤器根据以下至少任一种确定:

根据所述应用程序开发用户授权的MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制消息传输通道确定所述过滤器;

根据所述应用程序开发用户授权的MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定所述过滤器;

根据所述应用程序开发用户授权的所述MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及数据消息传输通道确定所述过滤器;

根据所述应用程序开发用户授权的所述MQTT设备的拥有用户的访问密匙及所述MQTT设备的唯一标识信息确定所述过滤器。

进一步地,基于所述服务端设备反馈的订阅主题认证请求结果将发布消息认证请求发送至所述服务端设备,包括:

基于所述服务端设备反馈的订阅成功的订阅主题认证请求结果,所述应用程序授权的MQTT设备根据报文中确定的主题名将发布消息认证请求发送至所述服务端设备。

进一步地,所述报文中的主题名包括:发布控制消息的报文中的主题名和发布查询消息的报文中的主题名,

所述方法还包括:

根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制消息传输通道确定所述发布控制消息的报文中的主题名;

根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定所述发布查询消息的报文中的主题名。

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

所述报文中的遗嘱消息采用预设的应用程序消息字符串,所述遗嘱消息的主题格式根据所述应用程序开发用户的访问密匙、所述应用程序的唯一标识信息和离线消息传输通道确定。

根据本申请另一方面,提供了一种在服务设备端基于MQTT的访问认证的方法,所述方法包括:

基于所述MQTT的客户端发送的接入认证请求对所述客户端进行认证,并向所述客户端反馈接入认证结果;

基于所述客户端发送的订阅主题认证请求判断所述客户端是否成功订阅主题,并向所述客户端反馈订阅主题认证请求结果;

接收所述客户端发布的消息认证请求后,根据报文中的服务质量确定发布消息认证结果,并根据所述发布消息认证结果确定与所述客户端的连接。

根据本申请再一个方面,还提供了一种基于MQTT的访问认证的客户端,所述客户端包括:

接入认证请求装置,用于将所述客户端的接入认证请求发送至服务端设备;

订阅主题认证请求装置,用于基于所述服务端设备反馈的接入认证结果向所述服务端设备发送订阅主题认证请求;

发布消息认证请求装置,用于基于所述服务端设备反馈的订阅主题认证请求结果将发布消息认证请求发送至所述服务端设备;

确定连接装置,用于基于所述服务端设备反馈的发布消息认证结果与所述服务端设备确定连接。

根据本申请另一方面,还提供了一种基于MQTT的访问认证的服务设备,其中,所述服务设备包括:

接入认证装置,用于基于客户端发送的接入认证请求对所述客户端进行认证,并向所述客户端反馈接入认证结果;

主题认证装置,用于基于所述客户端发送的订阅主题认证请求判断所述客户端是否成功订阅主题,并向所述客户端反馈订阅主题认证请求结果;

消息认证装置,用于接收所述客户端发布的消息认证请求后,根据报文中的服务质量确定发布消息认证结果,并根据所述发布消息认证结果确定与所述客户端的连接。

与现有技术相比,本申请通过将所述MQTT的客户端的接入认证请求发送至服务端设备;基于所述服务端设备反馈的接入认证结果向所述服务端设备发送订阅主题认证请求;基于所述服务端设备反馈的订阅主题认证请求结果将发布消息认证请求发送至所述服务端设备;基于所述服务端设备反馈的发布消息认证结果与所述服务端设备确定连接。实现了对MQTT客户端的接入认证、订阅认证、消息认证及对物联网平台中的MQTT设备、MQTT设备拥有者、应用程序和应用程序开发者的管理功能,减少了系统由于配置出错导致的问题,并提供了相应的网页界面使用户可以更直观的使用由MQTT客户端与服务端确定的系统。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一个方面的一种在客户端的基于MQTT的访问认证的方法流程示意图;

图2示出的本申请一实施例中客户端与服务端之间的访问认证的交互示意图;

图3示出根据本申请另一个方面的一种基于MQTT的访问认证的客户端的结构示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

图1示出根据本申请一个方面的一种在客户端的基于MQTT的访问认证的方法流程示意图,所述方法包括:步骤S11~步骤S14,

在步骤S11中,将所述MQTT的客户端的接入认证请求发送至服务端设备;在本申请实施例中,将MQTT客户端进行接入认证,在此,接入认证包括MQTT设备的接入认证和应用程序(APP)的接入认证。针对MQTT设备和APP的接入认证请求,有不同的接入认证流程,实现对MQTT设备、MQTT设备拥有用户、APP和APP开发用户的管理。

在步骤S12中,基于所述服务端设备反馈的接入认证结果向所述服务端设备发送订阅主题认证请求;在本申请实施例中,接入认证通过后,MQTT的客户端可以订阅相关主题,订阅主题时按照预设的主题格式进行,若尝试其他主题的格式则会导致错误,订阅失败。

在步骤S13中,基于所述服务端设备反馈的订阅主题认证请求结果将发布消息认证请求发送至所述服务端设备;在本申请实施例中,当订阅主题成功后,MQTT的客户端开始发布消息,发布消息的PUBLISH(发布)报文、回复控制消息的PUBLISH(发布)报文及回复查询消息的PUBLISH(发布)报文中的主题名需要按照预设的规则,若非法使用其他主题名进行发布将导致服务端断开连接。

在步骤S14中,基于所述服务端设备反馈的发布消息认证结果与所述服务端设备确定连接。在此,当发布消息认证结果为成功,则保持客户端与服务端的连接,可以继续在客户端与服务端之间进行安全传输,当发布消息认证结果为失败,则将断开与服务端之间的连接,保证消息传输的准确性和安全性。

优选地,当所述客户端包括MQTT设备和MQTT设备拥有用户时,在步骤S11中,向所述服务端设备发送所述MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;接收所述服务端设备为所述MQTT设备分配的唯一标识信息;基于所述访问密匙、加密密匙和所述唯一标识信息将所述MQTT设备的接入认证请求发送至服务端设备。在此,首先申请MQTT设备拥有用户owner账号,在管理界面中申请访问密匙(accessKey)和加密密匙(secretKey);接着,在管理界面中添加新的MQTT设备,为每个待接入的MQTT设备分配唯一标识信息deviceId,其中,MQTT设备为智慧园区的采集设备,能够接入到智慧园区的系统中;需要说明的是,访问密匙(accessKey)用来访问系统提供的一些应用程序的接口,用于MQTT协议中连接(CONNECT)报文中的user name字段(用户名字段),deviceId用于MQTT协议中的CONNECT报文中的ClinetId字段(客户端标识符),secretKey用于对MQTT协议中的CONNECT报文中的Payload(有效载荷)中的ClinetId字段(客户端标识符)、Will Topic(遗嘱主题)、Will Message(遗嘱消息)、User Name(用户名)字段进行签名,签名用于MQTT协议中的CONNECT报文中的Password(密码)字段。

需要说明的是,Will Topic(遗嘱主题)、Will Message(遗嘱消息)是由客户端预先定义的主题和对应消息,附加在CONNECT报文的可变头部中,在客户端连接出现异常的情况下,由服务器主动发布此消息。

优选地,在步骤S12中,基于所述服务端设备反馈的接入认证成功的接入认证结果,所述MQTT设备通过订阅主题的过滤器向所述服务端发送所述订阅主题认证请求,其中,所述订阅主题的过滤器根据所述MQTT设备拥有用户的访问密匙、唯一标识信息及控制消息传输通道确定,或根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定。在本申请一实施例中,订阅主题时必须使用{{MQTT设备拥有用户的访问密匙}}/{{MQTT设备ID}}/CONTROL,或{{MQTT设备拥有用户的访问密匙}}/{{MQTT设备ID}}/QUERY作为主题过滤器,尝试订阅任何其他主题会导致失败,当订阅失败后,服务端将在对应字节设置0x80以示相关主题未订阅成功。其中,CONTROL为控制消息传输通道,QUERY为查询消息传输通道。

优选地,在步骤S13中,基于所述服务端设备反馈的订阅成功的订阅主题认证请求结果,根据报文中确定的主题名将发布消息认证请求发送至所述服务端设备。在本申请一实施例中,所述报文中的主题名包括:发布消息的报文中的主题名、回复控制消息的报文中的主题名和回复查询消息的报文中的主题名,优选地,所述方法还包括:根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及数据消息传输通道确定所述发布消息的报文中的主题名;根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制回复消息传输通道确定所述回复控制消息的报文中的主题名;根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询回复消息传输通道确定所述回复查询消息的报文中的主题名。

在此,MQTT设备在订阅主题后开始发布消息,发布消息的PUBLISH报文中的主题名设置为{{设备拥有者的访问密匙}}/{{设备ID}}/DATA,回复控制消息的PUBLISH报文中的主题名设置为{{设备拥有者的访问密匙}}/{{设备ID}}/CREPLY,回复查询消息的PUBLISH报文中的主题名设置为{{设备拥有者的访问密匙}}/{{设备ID}}/QREPLY,尝试其他主题名将导致致命错误,非法使用其他主题名进行发布将导致服务端断开连接;其中,设备拥有者为MQTT设备拥有用户,DATA为数据消息传输通道,CREPLY为控制回复消息传输通道,QREPLY为查询回复消息传输通道。

优选地,所述方法还包括:步骤S15,所述报文中的遗嘱消息采用预设的MQTT设备消息字符串,所述遗嘱消息的主题格式根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息和离线消息传输通道确定。在本申请一实施例中,需要对遗嘱消息进行规范,采用固定的WizIOT OFFLINE字符串,遗嘱消息主题格式为{{设备拥有者的访问密匙}}/{{设备ID}}/OFFLINE,其中,WizIOT OFFLINE为设计的结果,主要区别于应用程序APP的遗嘱消息,OFFLINE为离线消息传输通道。

优选地,所述客户端包括应用程序开发用户授权的MQTT设备及所述MQTT设备拥有用户时,在步骤S11中,向所述服务端设备发送所述应用程序、所述应用程序开发用户、所述应用程序开发用户授权的MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;接收所述服务端设备为所述应用程序和所述MQTT设备分别分配的唯一标识信息;基于所述访问密匙、加密密匙、所述MQTT设备的唯一标识信息和所述应用程序的唯一标识信息将所述应用程序的接入认证请求发送至服务端设备。在本申请一实施例中,服务端优选为物联网平台后台,在后台的管理界面中申请accessKey及secretKey,接着,在物联网平台后台管理界面中为每个需要接入的APP终端获取AppId,其中,accessKey用于MQTT协议中的CONNECT报文中的User Name字段(用户名字段),AppId为应用程序APP的唯一标识符,用于MQTT协议中的CONNECT报文中的Payload(有效载荷)中的ClientId(客户端标识符)、Will Topic(遗嘱主题)、Will Message(遗嘱消息)、User Name(用户名)字段进行签名。

在本申请一实施例中,在步骤S12中,基于所述服务端设备反馈的接入认证成功的接入认证结果,所述应用程序通过订阅主题的过滤器向所述服务端发送所述订阅主题认证请求,其中,所述订阅主题的过滤器根据以下至少任一种确定:根据所述应用程序开发用户授权的MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制消息传输通道确定所述过滤器;根据所述应用程序开发用户授权的MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定所述过滤器;根据所述应用程序开发用户授权的所述MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及数据消息传输通道确定所述过滤器;根据所述应用程序开发用户授权的所述MQTT设备的拥有用户的访问密匙及所述MQTT设备的唯一标识信息确定所述过滤器。

在此,APP终端仅具备订阅所属APP开发者的被授权的MQTT设备的权力,接入认证通过后,APP终端可以订阅相关主题,订阅主题使用{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/CREPLY或{{MQTT设备拥有者的acessKey}}/{{MQTT设备的deviceId}}/QREPLY或{{MQTT设备拥有者的acessKey}}/{{MQTT设备的deviceId}}/DATA或{{MQTT设备拥有者的acessKey}}/{{MQTT设备的deviceId}}+或{{MQTT设备拥有者的acessKey}}/{{MQTT设备的deviceId}}/#作为主题过滤器,尝试订阅其他任何主题将导致失败,订阅失败后,服务端将在对应字节设置0x80以示相关主题未订阅成功。

优选地,在步骤S13中,基于所述服务端设备反馈的订阅成功的订阅主题认证请求结果,所述应用程序授权的MQTT设备根据报文中确定的主题名将发布消息认证请求发送至所述服务端设备。在本申请一实施例中,所述报文中的主题名包括:发布控制消息的报文中的主题名和发布查询消息的报文中的主题名,确定主题名的方法包括:根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制消息传输通道确定所述发布控制消息的报文中的主题名;根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定所述发布查询消息的报文中的主题名。

在此,APP终端应在订阅主题后开始发布消息,APP终端仅具备所属APP开发者的被授权的MQTT设备发布消息的权力,发布控制消息的PUBLISH报文中的主题名设置为{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/CONTROL,发布查询消息的PUBLISH报文中的主题名设置为{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/QUERY,尝试使用其他主题名将导致致命错误,当非法使用其他主题名进行发布时,将导致服务端断开连接。

优选地,所述方法还包括:步骤S15’,所述报文中的遗嘱消息采用预设的应用程序消息字符串,所述遗嘱消息的主题格式根据所述应用程序开发用户的访问密匙、所述应用程序的唯一标识信息和离线消息传输通道确定。在本申请一实施例中,采用固定的WizIOT APP OFFLINE字符串,遗嘱消息主题格式为{{APP开发者的访问密匙}}/{{AppID}}/OFFLINE。

根据本申请另一方面,提供了一种在服务设备端基于MQTT的访问认证的方法,所述方法包括:步骤S21~步骤S23,其中,在步骤S21中,基于所述MQTT的客户端发送的接入认证请求对所述客户端进行认证,并向所述客户端反馈接入认证结果;在步骤S22中,基于所述客户端发送的订阅主题认证请求判断所述客户端是否成功订阅主题,并向所述客户端反馈订阅主题认证请求结果;在步骤S23中,接收所述客户端发布的消息认证请求后,根据报文中的服务质量确定发布消息认证结果,并根据所述发布消息认证结果确定与所述客户端的连接。在本申请一实施例中,系统包括服务端和MQTT的客户端,通过服务端对MQTT的客户端进行接入认证、订阅认证、消息认证以及对平台中的MQTT设备、MQTT设备拥有者、APP和APP开发者的管理功能,实现了MQTT的认证扩展和安全传输,减少了系统由于配置出错导致的错误,并提供相应的网页界面使用户可以更直观的使用系统。

优选地,在步骤S22中,接收所述客户端发送的订阅主题认证请求;根据所述客户端的标识信息、遗嘱主题、遗嘱消息、用户名字段、密码字段判断所述客户端是否成功订阅主题,若否,则在对应字节设置未订阅成功标识。

如图2示出的本申请一实施例中客户端与服务端之间的访问认证的交互示意图。以MQTT设备为例进行说明设备的接入认证、订阅认证及消息认证,首先,数据服务总线组件中的MQTT设备进行接入认证,服务端的数据服务总线反馈认证结果,其中,反馈认证结果是根据接入的MQTT设备的ClientID(客户端标识符)、Will Topic(遗嘱主题)、Will Message(遗嘱消息)、User Name(用户名)、Password(密码)字段进行判断的,如果是合法的,则认证成功,MQTT设备成功接入,进而能够通过MQTT与服务器进行通信。对于接入认证成功的MQTT设备,开始订阅相关主题,服务端根据订阅主题判断MQTT设备是否订阅成功,若失败则在对应字节设置0x80。MQTT设备发布消息,服务端在接收到MQTT设备发布的消息后判断所发布消息的主题名是否为预设要求的规范格式,若非法使用其他主题名,则断开与MQTT设备之间的连接,发布消息失败。若使用主题名合法,则MQTT设备的消息成功发布,通过MQTT与服务器维持正常通信,对发布消息的确认根据PUBLISH报文中的QOS(服务质量)字段确定。

优选地,所述客户端包括MQTT设备和MQTT设备拥有用户时,在步骤S21中,接收所述MQTT设备拥有用户发送的所述MQTT设备拥有用户和所述MQTT设备的访问密匙和加密密匙的申请请求;根据所述申请请求将所述MQTT设备添加至管理集群中,并为所述MQTT设备分配唯一标识信息;接收所述MQTT设备基于所述访问密匙、加密密匙和所述唯一标识信息发送的接入认证请求。在本申请一实施例中,进行MQTT设备的接入认证、订阅认证、消息认证时,首先根据MQTT设备拥有者申请个人账号及MQTT设备的访问密匙、加密密匙的申请,给MQTT设备分配一个设备ID,以及为MQTT设备和MQTT设备的拥有者分别分配访问密匙和加密密匙,并将MQTT设备添加至管理集群中,其中,管理集群优选为物联网平台管理界面。

优选地,所述客户端包括应用程序开发用户授权的MQTT设备及所述MQTT设备拥有用户时,在步骤S21中,接收所述应用程序开发用户授权的MQTT设备发送的所述应用程序、所述应用程序开发用户、所述MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;根据所述申请请求将所述应用程序添加至管理集群中,并为所述应用程序和所述MQTT设备分别分配唯一标识信息;接收所述应用程序基于所述访问密匙、加密密匙、所述MQTT设备的唯一标识信息和所述应用程序的唯一标识信息发送的接入认证请求。在本申请一实施例中,进行APP的接入认证、订阅认证、消息认证时,首先根据APP终端的申请,为APP终端分配应用程序的唯一标识信息(APPId),并为APP、APP的开发者、APP开发者授权的MQTT设备及MQTT设备的拥有者分别分配访问密匙和加密密匙,接收APP的接入认证请求,完成APP的接入认证。

本申请所述的基于MQTT的访问认证的方法,实现了对MQTT客户端的接入认证、订阅认证、消息认证及对物联网平台中的采集设备、采集设备拥有者、APP和APP开发者的管理功能,并提供了安全套接层(SSL)和网络通信(Websocket)支持,减少了系统由于配置出错导致的问题,并提供了相应的网页界面使用户可以更直观的使用由MQTT客户端与服务端确定的系统。

图3示出根据本申请另一个方面的一种基于MQTT的访问认证的客户端的结构示意图,所述客户端包括:接入认证请求装置11、订阅主题认证请求装置12、发布消息认证请求装置13和确定连接装置14,

接入认证请求装置11,用于将所述MQTT的客户端的接入认证请求发送至服务端设备;在本申请实施例中,将MQTT客户端进行接入认证,在此,接入认证包括MQTT设备的接入认证和应用程序(APP)的接入认证。针对MQTT设备和APP的接入认证请求,有不同的接入认证流程,实现对MQTT设备、MQTT设备拥有用户、APP和APP开发用户的管理。

订阅主题认证请求装置12,用于基于所述服务端设备反馈的接入认证结果向所述服务端设备发送订阅主题认证请求;在本申请实施例中,接入认证通过后,MQTT的客户端可以订阅相关主题,订阅主题时按照预设的主题格式进行,若尝试其他主题的格式则会导致错误,订阅失败。

发布消息认证请求装置13,用于基于所述服务端设备反馈的订阅主题认证请求结果将发布消息认证请求发送至所述服务端设备;在本申请实施例中,当订阅主题成功后,MQTT的客户端开始发布消息,发布消息的PUBLISH(发布)报文、回复控制消息的PUBLISH(发布)报文及回复查询消息的PUBLISH(发布)报文中的主题名需要按照预设的规则,若非法使用其他主题名进行发布将导致服务端断开连接。

确定连接装置14,用于基于所述服务端设备反馈的发布消息认证结果与所述服务端设备确定连接。在此,当发布消息认证结果为成功,则保持客户端与服务端的连接,可以继续在客户端与服务端之间进行安全传输,当发布消息认证结果为失败,则将断开与服务端之间的连接,保证消息传输的准确性和安全性。

优选地,当所述客户端包括MQTT设备和MQTT设备拥有用户时,接入认证请求装置11,用于向所述服务端设备发送所述MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;接收所述服务端设备为所述MQTT设备分配的唯一标识信息;基于所述访问密匙、加密密匙和所述唯一标识信息将所述MQTT设备的接入认证请求发送至服务端设备。在此,首先申请MQTT设备拥有用户owner账号,在管理界面中申请访问密匙(accessKey)和加密密匙(secretKey);接着,在管理界面中添加新的MQTT设备,为每个待接入的MQTT设备分配唯一标识信息deviceId,其中,MQTT设备为智慧园区的采集设备,能够接入到智慧园区的系统中;需要说明的是,访问密匙(accessKey)用来访问系统提供的一些应用程序的接口,用于MQTT协议中连接(CONNECT)报文中的user name字段(用户名字段),deviceId用于MQTT协议中的CONNECT报文中的ClinetId字段(客户端标识符),secretKey用于对MQTT协议中的CONNECT报文中的Payload(有效载荷)中的ClinetId字段(客户端标识符)、Will Topic(遗嘱主题)、Will Message(遗嘱消息)、User Name(用户名)字段进行签名,签名用于MQTT协议中的CONNECT报文中的Password(密码)字段。

需要说明的是,Will Topic(遗嘱主题)、Will Message(遗嘱消息)是由客户端预先定义的主题和对应消息,附加在CONNECT报文的可变头部中,在客户端连接出现异常的情况下,由服务器主动发布此消息。

优选地,订阅主题认证请求装置12,用于基于所述服务端设备反馈的接入认证成功的接入认证结果,所述MQTT设备通过订阅主题的过滤器向所述服务端发送所述订阅主题认证请求,其中,所述订阅主题的过滤器根据所述MQTT设备拥有用户的访问密匙、唯一标识信息及控制消息传输通道确定,或根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定。在本申请一实施例中,订阅主题时必须使用{{MQTT设备拥有用户的访问密匙}}/{{MQTT设备ID}}/CONTROL,或{{MQTT设备拥有用户的访问密匙}}/{{MQTT设备ID}}/QUERY作为主题过滤器,尝试订阅任何其他主题会导致失败,当订阅失败后,服务端将在对应字节设置0x80以示相关主题未订阅成功。其中,CONTROL为控制消息传输通道,QUERY为查询消息传输通道。

优选地,发布消息认证请求装置13,用于基于所述服务端设备反馈的订阅成功的订阅主题认证请求结果,根据报文中确定的主题名将发布消息认证请求发送至所述服务端设备。在本申请一实施例中,所述报文中的主题名包括:发布消息的报文中的主题名、回复控制消息的报文中的主题名和回复查询消息的报文中的主题名,优选地,所述客户端还包括:主题名确定装置,用于根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及数据消息传输通道确定所述发布消息的报文中的主题名;根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制回复消息传输通道确定所述回复控制消息的报文中的主题名;根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询回复消息传输通道确定所述回复查询消息的报文中的主题名。

在此,MQTT设备在订阅主题后开始发布消息,发布消息的PUBLISH报文中的主题名设置为{{设备拥有者的访问密匙}}/{{设备ID}}/DATA,回复控制消息的PUBLISH报文中的主题名设置为{{设备拥有者的访问密匙}}/{{设备ID}}/CREPLY,回复查询消息的PUBLISH报文中的主题名设置为{{设备拥有者的访问密匙}}/{{设备ID}}/QREPLY,尝试其他主题名将导致致命错误,非法使用其他主题名进行发布将导致服务端断开连接;其中,设备拥有者为MQTT设备拥有用户,DATA为数据消息传输通道,CREPLY为控制回复消息传输通道,QREPLY为查询回复消息传输通道。

优选地,所述客户端还包括:第一规范装置15,用于所述报文中的遗嘱消息采用预设的MQTT设备消息字符串,所述遗嘱消息的主题格式根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息和离线消息传输通道确定。在本申请一实施例中,需要对遗嘱消息进行规范,采用固定的WizIOT OFFLINE字符串,遗嘱消息主题格式为{{设备拥有者的访问密匙}}/{{设备ID}}/OFFLINE,其中,WizIOT OFFLINE为设计的结果,主要区别于应用程序APP的遗嘱消息,OFFLINE为离线消息传输通道。

优选地,所述客户端包括应用程序开发用户授权的MQTT设备及所述MQTT设备拥有用户时,接入认证请求装置11,用于向所述服务端设备发送所述应用程序、所述应用程序开发用户、所述应用程序开发用户授权的MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;接收所述服务端设备为所述应用程序和所述MQTT设备分别分配的唯一标识信息;基于所述访问密匙、加密密匙、所述MQTT设备的唯一标识信息和所述应用程序的唯一标识信息将所述应用程序的接入认证请求发送至服务端设备。在本申请一实施例中,服务端优选为物联网平台后台,在后台的管理界面中申请accessKey及secretKey,接着,在物联网平台后台管理界面中为每个需要接入的APP终端获取AppId,其中,acessKey用于MQTT协议中的CONNECT报文中的User Name字段(用户名字段),AppId为应用程序APP的唯一标识符,用于MQTT协议中的CONNECT报文中的Payload(有效载荷)中的ClientId(客户端标识符)、Will Topic(遗嘱主题)、Will Message(遗嘱消息)、User Name(用户名)字段进行签名。

在本申请一实施例中,订阅主题认证请求装置12,用于基于所述服务端设备反馈的接入认证成功的接入认证结果,所述应用程序通过订阅主题的过滤器向所述服务端发送所述订阅主题认证请求,其中,所述订阅主题的过滤器根据以下至少任一种确定:根据所述应用程序开发用户授权的MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制消息传输通道确定所述过滤器;根据所述应用程序开发用户授权的MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定所述过滤器;根据所述应用程序开发用户授权的所述MQTT设备的拥有用户的访问密匙、所述MQTT设备的唯一标识信息及数据消息传输通道确定所述过滤器;根据所述应用程序开发用户授权的所述MQTT设备的拥有用户的访问密匙及所述MQTT设备的唯一标识信息确定所述过滤器。

在此,APP终端仅具备订阅所属APP开发者的被授权的MQTT设备的权力,接入认证通过后,APP终端可以订阅相关主题,订阅主题使用{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/CREPLY或{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/QREPLY或{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/DATA或{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}+或{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/#作为主题过滤器,尝试订阅其他任何主题将导致失败,订阅失败后,服务端将在对应字节设置0x80以示相关主题未订阅成功。

优选地,发布消息认证请求装置13,用于基于所述服务端设备反馈的订阅成功的订阅主题认证请求结果,所述应用程序授权的MQTT设备根据报文中确定的主题名将发布消息认证请求发送至所述服务端设备。在本申请一实施例中,所述报文中的主题名包括:发布控制消息的报文中的主题名和发布查询消息的报文中的主题名,所述客户端还包括主题名确定装置,用于根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及控制消息传输通道确定所述发布控制消息的报文中的主题名;根据所述MQTT设备拥有用户的访问密匙、所述MQTT设备的唯一标识信息及查询消息传输通道确定所述发布查询消息的报文中的主题名。

在此,APP终端应在订阅主题后开始发布消息,APP终端仅具备所属APP开发者的被授权的MQTT设备发布消息的权力,发布控制消息的PUBLISH报文中的主题名设置为{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/CONTROL,发布查询消息的PUBLISH报文中的主题名设置为{{MQTT设备拥有者的accessKey}}/{{MQTT设备的deviceId}}/QUERY,尝试使用其他主题名将导致致命错误,当非法使用其他主题名进行发布时,将导致服务端断开连接。

优选地,所述客户端还包括:第二规范装置15’,用于所述报文中的遗嘱消息采用预设的应用程序消息字符串,所述遗嘱消息的主题格式根据所述应用程序开发用户的访问密匙、所述应用程序的唯一标识信息和离线消息传输通道确定。在本申请一实施例中,采用固定的WizIOT APP OFFLINE字符串,遗嘱消息主题格式为{{APP开发者的访问密匙}}/{{AppID}}/OFFLINE。

根据本申请另一方面,还提供了一种基于MQTT的访问认证的服务设备,所述服务设备包括:接入认证装置21、主题认证装置22和消息认证装置23,其中,接入认证装置21,用于基于所述MQTT的客户端发送的接入认证请求对所述客户端进行认证,并向所述客户端反馈接入认证结果;主题认证装置22,用于基于所述客户端发送的订阅主题认证请求判断所述客户端是否成功订阅主题,并向所述客户端反馈订阅主题认证请求结果;消息认证装置23,用于接收所述客户端发布的消息认证请求后,根据报文中的服务质量确定发布消息认证结果,并根据所述发布消息认证结果确定与所述客户端的连接。在本申请一实施例中,系统包括服务端和MQTT的客户端,通过服务端对MQTT的客户端进行接入认证、订阅认证、消息认证以及对平台中的MQTT设备、MQTT设备拥有者、APP和APP开发者的管理功能,实现了MQTT的认证扩展和安全传输,减少了系统由于配置出错导致的错误,并提供相应的网页界面使用户可以更直观的使用系统。

优选地,主题认证装置22,用于接收所述客户端发送的订阅主题认证请求;根据所述客户端的标识信息、遗嘱主题、遗嘱消息、用户名字段、密码字段判断所述客户端是否成功订阅主题,若否,则在对应字节设置未订阅成功标识。

如图2示出的本申请一实施例中客户端与服务端之间的访问认证的交互示意图。以MQTT设备为例进行说明设备的接入认证、订阅认证及消息认证,首先,数据服务总线组件中的MQTT设备进行接入认证,服务端的数据服务总线反馈认证结果,其中,反馈认证结果是根据接入的MQTT设备的ClientID(客户端标识符)、Will Topic(遗嘱主题)、Will Message(遗嘱消息)、User Name(用户名)、Password(密码)字段进行判断的,如果是合法的,则认证成功,MQTT设备成功接入,进而能够通过MQTT与服务器进行通信。对于接入认证成功的MQTT设备,开始订阅相关主题,服务端根据订阅主题判断MQTT设备是否订阅成功,若失败则在对应字节设置0x80。MQTT设备发布消息,服务端在接收到MQTT设备发布的消息后判断所发布消息的主题名是否为预设要求的规范格式,若非法使用其他主题名,则断开与MQTT设备之间的连接,发布消息失败。若使用主题名合法,则MQTT设备的消息成功发布,通过MQTT与服务器维持正常通信,对发布消息的确认根据PUBLISH报文中的QOS(服务质量)字段确定。

优选地,所述客户端包括MQTT设备和MQTT设备拥有用户时,接入认证装置21,用于接收所述MQTT设备拥有用户发送的所述MQTT设备拥有用户和所述MQTT设备的访问密匙和加密密匙的申请请求;根据所述申请请求将所述MQTT设备添加至管理集群中,并为所述MQTT设备分配唯一标识信息;接收所述MQTT设备基于所述访问密匙、加密密匙和所述唯一标识信息发送的接入认证请求。在本申请一实施例中,进行MQTT设备的接入认证、订阅认证、消息认证时,首先根据MQTT设备拥有者申请个人账号及MQTT设备的访问密匙、加密密匙的申请,给MQTT设备分配一个设备ID,以及为MQTT设备和MQTT设备的拥有者分别分配访问密匙和加密密匙,并将MQTT设备添加至管理集群中,其中,管理集群优选为物联网平台管理界面。

优选地,所述客户端包括应用程序开发用户授权的MQTT设备及所述MQTT设备拥有用户时,接入认证装置21,用于接收所述应用程序开发用户授权的MQTT设备发送的所述应用程序、所述应用程序开发用户、所述MQTT设备拥有用户及所述MQTT设备的访问密匙和加密密匙的申请请求;根据所述申请请求将所述应用程序添加至管理集群中,并为所述应用程序和所述MQTT设备分别分配唯一标识信息;接收所述应用程序基于所述访问密匙、加密密匙、所述MQTT设备的唯一标识信息和所述应用程序的唯一标识信息发送的接入认证请求。在本申请一实施例中,进行APP的接入认证、订阅认证、消息认证时,首先根据APP终端的申请,为APP终端分配应用程序的唯一标识信息(APPId),并为APP、APP的开发者、APP开发者授权的MQTT设备及MQTT设备的拥有者分别分配访问密匙和加密密匙,接收APP的接入认证请求,完成APP的接入认证。

本申请所述的基于MQTT的访问认证的方法,实现了对MQTT客户端的接入认证、订阅认证、消息认证及对物联网平台中的采集设备、采集设备拥有者、APP和APP开发者的管理功能,并提供了安全套接层(SSL)和网络通信(Websocket)支持,减少了系统由于配置出错导致的问题,并提供了相应的网页界面使用户可以更直观的使用由MQTT客户端与服务端确定的系统。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

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