本发明涉及通信技术领域,并且更具体地,涉及一种基于token认证的websocket连接方法及系统。
背景技术:
为满足开票系统客户端一些消息类业务可以实时的告知客户的需求,开票系统页面需要接入websocket长连接实时向用户推送各种消息。websocket是一种支持浏览器与服务器全双工通信的协议,对于复杂的前端应用,在交互体验和性能的改进上,是一种非常合适的解决方案。然而,大家关于安全有一个可能的误区是:如果用户通过了web客户端应用的认证(登录了系统),建立的websocket连接,就也是经过认证的,实时上,这是两个完全不同的通道,socket连接需要建立自己的认证体系。
一种传统的方式是基于cookie实现此功能,虽然简单易操作,却往往有以下缺点和问题:
一、强耦合性。基于cookie,意味着,应用本身的认证和提供websocket的服务,得是同一套sessioncookie的管理机制。有的时候,可能这也不是大的问题,但是以目前我们工程中的大部分场景看,应用服务是基于java的一些webframework,而socket由socket.io来提供。让两个功能的系统协调一种共享的认证方式,就不那么容易,且不容易让websocket长连接服务得到其他第三方客户端的便利接入。所以,需要解除这种对应用服务的依赖。
二、冗余的session管理。如果websocket服务自己来维护基于cookie的认证,就需要借助一些存储(db、redis)来存储session。作为一个纯为解决通信连接的服务,主要作为消息传输通道使用,而不希望去关心消息内容及其他除了传递消息的功能。
三、适用性较低。cookie会在有些设备或浏览器设置中被禁用,在这种情况下,就还需要一种替代的方式来实现认证。
技术实现要素:
本发明提出一种基于token认证的websocket连接方法及系统,以解决如何问题。
为了解决上述问题,根据本发明的一个方面,提供了一种基于token认证的websocket连接方法,所述方法包括:
请求客户端发送token授权请求至token授权认证服务端;
token授权认证服务端根据所述token授权请求对所述请求客户端进行身份验证,并当通过身份验证后生成并返回token令牌至所述请求客户端;
请求客户端基于所述token令牌发送建立连接请求至websocket服务端;
websocket服务端携带接收的token令牌至所述token授权认证服务端进行token合法性验证,并接收所述token授权认证服务端返回的合法性验证结果;
当所述合法性验证结果指示通过合法性验证时,websocket服务端建立与所述请求客户端的websocket长连接。
优选地,其中所述token授权请求包括:所述请求客户端的身份标识和唯一注册授权码;其中,所述身份标识满足所述token授权认证服务端的服务要求;所述唯一注册授权码由身份注册系统生成并维护。
优选地,其中当通过身份验证后,token授权认证服务端通过预设的令牌生成规则生成token令牌,并对所述token令牌进行签名;当未通过身份验证后,token授权认证服务端发送未通过身份认证消息至请求客户端。
优选地,其中所述token授权认证服务端根据预设的token认证规则对所述token令牌进行token合法性验证。
优选地,其中所述token授权服务端的token令牌的生成和合法性验证均通过post方式实现。
根据本发明的另一个方面,提供了一种基于token认证的websocket连接系统,所述系统包括:
授权请求发送单元,用于使请求客户端发送token授权请求至token授权认证服务端;
token令牌生成单元,用于使token授权认证服务端根据所述token授权请求对所述请求客户端进行身份验证,当通过身份验证后生成并返回token令牌至所述请求客户端;
建立连接请求发送单元,用于使请求客户端基于所述token令牌发送建立连接请求至websocket服务端;
合法性验证单元,用于使websocket服务端携带接收的token令牌至所述token授权认证服务端进行token合法性验证,并接收所述token授权认证服务端返回的合法性验证结果;
连接建立单元,用于当所述合法性验证结果指示通过合法性验证时,websocket服务端建立与所述请求客户端的websocket长连接。
优选地,其中所述token授权请求包括:所述请求客户端的身份标识和唯一注册授权码;其中,所述身份标识满足所述token授权认证服务端的服务要求;所述唯一注册授权码由身份注册系统生成并维护。
优选地,其中当通过身份验证后,token授权认证服务端通过预设的令牌生成规则生成token令牌,并对所述token令牌进行签名;当未通过身份验证后,token授权认证服务端发送未通过身份认证消息至请求客户端。
优选地,其中所述token授权认证服务端根据预设的token认证规则对所述token令牌进行token合法性验证。
优选地,其中所述token授权服务端的token令牌的生成和合法性验证均通过post方式实现。
本发明提供了一种基于token认证的websocket连接方法及系统,能够有效解决传统的cookie认证的一些缺点,在保证安全的前提下与客户端、服务端解耦;支持第三方系统不同类型软件(pc/web)的对接,满足不同场景下的业务需要;通过此方法认证的websocket连接,在认证失败后,立即断开连接,也可以有效节约资源;该方式使得各个系统更专注于自己功能本身,可做到一处构建,处处使用。
附图说明
通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:
图1为根据本发明实施方式的基于token认证的websocket连接方法100的流程图;
图2为根据本发明实施方式的实现基于token认证的websocket连接的系统架构图;
图3为根据本发明实施方式的基于token认证的websocket连接系统300的结构示意图。
具体实施方式
现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。
除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。
图1为根据本发明实施方式的基于token认证的websocket连接方法100的流程图。如图1所示,本发明实施方式提供的基于token认证的websocket连接方法,能够有效解决传统的cookie认证的一些缺点,在保证安全的前提下与客户端、服务端解耦;支持第三方系统不同类型软件(pc/web)的对接,满足不同场景下的业务需要;通过此方法认证的websocket连接,在认证失败后,立即断开连接,也可以有效节约资源;该方式使得各个系统更专注于自己功能本身,可做到一处构建,处处使用。本发明实施方式提供的基于token认证的websocket连接方法100,从步骤101处开始,在步骤101请求客户端发送token授权请求至token授权认证服务端。
优选地,其中所述token授权请求包括:所述请求客户端的身份标识和唯一注册授权码;其中,所述身份标识满足所述token授权认证服务端的服务要求;所述唯一注册授权码由身份注册系统生成并维护。
在步骤102,token授权认证服务端根据所述token授权请求对所述请求客户端进行身份验证,并当通过身份验证后生成并返回token令牌至所述请求客户端。
优选地,其中当通过身份验证后,token授权认证服务端通过预设的令牌生成规则生成token令牌,并对所述token令牌进行签名;当未通过身份验证后,token授权认证服务端发送未通过身份认证消息至请求客户端。
优选地,其中所述token授权认证服务端根据预设的token认证规则对所述token令牌进行token合法性验证。
结合图2所示,在本发明的实施方式中,请求客户端向token授权认证服务端申请生成token令牌。具体地,请求客户端携带包括token授权认证服务要求的身份标识和注册授权码的token授权请求至token授权认证服务端;其中,注册授权码由身份注册系统生成唯一标识并维护。token授权认证服务端校验需要生成token令牌的客户端身份;身份校验通过,token授权认证服务端通过算法与一定的规则生成token安全令牌,返回给对应的请求客户端。其中,在token申请生成过程采用等多重安全保证措施,如crc、hmac256签名算法,内部定义规则、随机数、有效期等,保障授权令牌生成的安全性。
在步骤103,请求客户端基于所述token令牌发送建立连接请求至websocket服务端。
在步骤104,websocket服务端携带接收的token令牌至所述token授权认证服务端进行token合法性验证,并接收所述token授权认证服务端返回的合法性验证结果。
结合图2所示,在本发明的实施方式中,请求客户端携带token令牌与websocket服务端请求建立连接,websocket服务端向token授权服务申请验证token。具体地,token服务端携带客户端请求的token令牌到token授权认证服务端进行校验,token授权认证服务端根据token认证规则判断token是否合法且有效,并返回合法性验证结果至websocket服务端。
在步骤105,当所述合法性验证结果指示通过合法性验证时,websocket服务端建立与所述请求客户端的websocket长连接。
优选地,其中所述token授权服务端的token令牌的生成和合法性验证均通过post方式实现。
在本发明的实施方式中,若token验证通过,则websocket服务端与请求客户端成功建立连接。其中,如果token验证通过,token服务端成功建立状态码为101的websocket长连接;若验证不通过,则token服务端需要断开websocket长连接,释放资源。
本发明的基于token认证的websocket连接机制,无需账户互通即可满足各第三方客户端系统授权与websocket服务建立长连接的需求,容易让websocket长连接服务得到其他第三方客户端的便利接入,真正意义实现了websocket作为长连接服务端的构建意义。token授权服务端也可作为其他第三方服务需要授权认证的api,为其他系统提供授权认证服务。token授权服务端对客户端与服务端编码语言没有任何限制,也不需要做语言兼容,此方法的实现demo服务端端使用nodejs语言编码、客户端使用java语言编码。token授权服务端提供的token生成与验证均是post方式实现。例如,地址示例:http://ip:port/tokenapply。
本发明实现的基于token认证的websocket连接,token的生成与认证均在token授权认证服务实现,与客户端与服务端实现功能解耦,提高了系统安全性。
图3为根据本发明实施方式的基于token认证的websocket连接系统300的结构示意图。如图3所示,本发明实施方式提供的基于token认证的websocket连接系统300,包括:授权请求发送单元301、token令牌生成单元302、建立连接请求发送单元303、合法性验证单元304和连接建立单元305。
优选地,所述授权请求发送单元301,用于使请求客户端发送token授权请求至token授权认证服务端。
优选地,其中所述token授权请求包括:所述请求客户端的身份标识和唯一注册授权码;其中,所述身份标识满足所述token授权认证服务端的服务要求;所述唯一注册授权码由身份注册系统生成并维护。
优选地,所述token令牌生成单元302,用于使token授权认证服务端根据所述token授权请求对所述请求客户端进行身份验证,当通过身份验证后生成并返回token令牌至所述请求客户端。
优选地,其中当通过身份验证后,token授权认证服务端通过预设的令牌生成规则生成token令牌,并对所述token令牌进行签名;当未通过身份验证后,token授权认证服务端发送未通过身份认证消息至请求客户端。
优选地,所述建立连接请求发送单元303,用于使请求客户端基于所述token令牌发送建立连接请求至websocket服务端。
优选地,所述合法性验证单元304,用于使websocket服务端携带接收的token令牌至所述token授权认证服务端进行token合法性验证,并接收所述token授权认证服务端返回的合法性验证结果。
优选地,其中所述token授权认证服务端根据预设的token认证规则对所述token令牌进行token合法性验证。
优选地,所述连接建立单元305,用于当所述合法性验证结果指示通过合法性验证时,websocket服务端建立与所述请求客户端的websocket长连接。
优选地,其中所述token授权服务端的token令牌的生成和合法性验证均通过post方式实现。
本发明的实施例的基于token认证的websocket连接系统300与本发明的另一个实施例的基于token认证的websocket连接方法100相对应,在此不再赘述。
已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。
通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
1.一种基于token认证的websocket连接方法,其特征在于,所述方法包括:
请求客户端发送token授权请求至token授权认证服务端;
token授权认证服务端根据所述token授权请求对所述请求客户端进行身份验证,并当通过身份验证后生成并返回token令牌至所述请求客户端;
请求客户端基于所述token令牌发送建立连接请求至websocket服务端;
websocket服务端携带接收的token令牌至所述token授权认证服务端进行token合法性验证,并接收所述token授权认证服务端返回的合法性验证结果;
当所述合法性验证结果指示通过合法性验证时,websocket服务端建立与所述请求客户端的websocket长连接。
2.根据权利要求1所述的方法,其特征在于,所述token授权请求包括:所述请求客户端的身份标识和唯一注册授权码;其中,所述身份标识满足所述token授权认证服务端的服务要求;所述唯一注册授权码由身份注册系统生成并维护。
3.根据权利要求1所述的方法,其特征在于,当通过身份验证后,token授权认证服务端通过预设的令牌生成规则生成token令牌,并对所述token令牌进行签名;当未通过身份验证后,token授权认证服务端发送未通过身份认证消息至请求客户端。
4.根据权利要求1所述的方法,其特征在于,所述token授权认证服务端根据预设的token认证规则对所述token令牌进行token合法性验证。
5.根据权利要求1所述的方法,其特征在于,所述token授权服务端的token令牌的生成和合法性验证均通过post方式实现。
6.一种基于token认证的websocket连接系统,其特征在于,所述系统包括:
授权请求发送单元,用于使请求客户端发送token授权请求至token授权认证服务端;
token令牌生成单元,用于使token授权认证服务端根据所述token授权请求对所述请求客户端进行身份验证,当通过身份验证后生成并返回token令牌至所述请求客户端;
建立连接请求发送单元,用于使请求客户端基于所述token令牌发送建立连接请求至websocket服务端;
合法性验证单元,用于使websocket服务端携带接收的token令牌至所述token授权认证服务端进行token合法性验证,并接收所述token授权认证服务端返回的合法性验证结果;
连接建立单元,用于当所述合法性验证结果指示通过合法性验证时,websocket服务端建立与所述请求客户端的websocket长连接。
7.根据权利要求6所述的系统,其特征在于,所述token授权请求包括:所述请求客户端的身份标识和唯一注册授权码;其中,所述身份标识满足所述token授权认证服务端的服务要求;所述唯一注册授权码由身份注册系统生成并维护。
8.根据权利要求6所述的系统,其特征在于,当通过身份验证后,token授权认证服务端通过预设的令牌生成规则生成token令牌,并对所述token令牌进行签名;当未通过身份验证后,token授权认证服务端发送未通过身份认证消息至请求客户端。
9.根据权利要求6所述的系统,其特征在于,所述token授权认证服务端根据预设的token认证规则对所述token令牌进行token合法性验证。
10.根据权利要求6所述的系统,其特征在于,所述token授权服务端的token令牌的生成和合法性验证均通过post方式实现。
技术总结