一种基于OpenResty的云端鉴权方案实现方法及系统
技术领域
本发明涉及云端服务安全的技术领域,尤其涉及一种基于OpenResty的云端鉴权实现方法及系统。
背景技术
近年来,云计算得到了快速的发展,作为一种能够提供动态资源池、虚拟化和具有高可用性的计算平台技术,云计算平台能够动态地部署和分配计算机资源,并监控资源的使用情况。由于云计算平台能够向大量的用户提供服务,因此用户如何接入云端、获取资源,从而安全、快速的获取资源,是云计算需要解决的一大问题。
现有的常规鉴权方式主要是通过用户在业务端的身份来判断有没有权限获取资源,例如RBAC模式,该模式是跟业务强耦合在一起不易扩展和单独部署;也有需要通过授权服务器校验后才能获取资源的方式,例如OAuth2模式,但需要单独一个应用服务器来启动,不够轻便和高效。
发明内容
本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
鉴于上述现有存在的问题,提出了本发明。
因此,本发明目的是提供一种基于OpenResty的云端鉴权实现方法,能够通过对鉴权字符串的校验判断请求是否合法,鉴权通过后再转发到资源服务器,从而达到保护资源的目的,同时利用OpenResty的高效性,保证访问的速度。
为解决上述技术问题,本发明提供如下技术方案:一种基于OpenResty的云端鉴权实现方法,包括以下步骤,业务服务器在鉴权模块注册,并返回注册结果;客户端向所述业务服务器发起访问资源信息的请求,所述业务服务器返回一个可以通过鉴权的鉴权字符串;所述客户端携带所述鉴权字符串向所述鉴权模块请求资源访问,所述鉴权模块根据所述鉴权字符串校验请求的合法性,并返回响应的成功或失败信息。
作为本发明所述基于OpenResty的云端鉴权实现方法的一种优选方案,其中:所述业务服务器在所述鉴权模块注册时,携带所述业务服务器的业务名称和业务版本信息。
作为本发明所述基于OpenResty的云端鉴权实现方法的一种优选方案,其中:所述业务服务器通过调用sdk提供的方法生成鉴权字符串,并返回给所述客户端。
作为本发明所述基于OpenResty的云端鉴权实现方法的一种优选方案,其中:所述鉴权字符串包括版本号、接入键标识ak、当前时间、有效时间、请求头信息和加密字符串。
作为本发明所述基于OpenResty的云端鉴权实现方法的一种优选方案,其中:得到所述加密字符串还包括以下步骤,将安全接入键sk、版本、当前时间、有效时间和请求url通过sha256算法进行加密,得到所述加密字符串。。
作为本发明所述基于OpenResty的云端鉴权实现方法的一种优选方案,其中:所述鉴权模块使用lua代码搭建并进行校验。
作为本发明所述基于OpenResty的云端鉴权实现方法的一种优选方案,其中:所述校验还包括以下步骤,取出所述请求中携带的所述鉴权字符串;判断版本号是否正确,若不正确则返回鉴权失败;根据接入键标识ak获取对应的安全接入键sk,判断接入键标识ak是否合法,若不合法则返回鉴权失败;根据当前时间和有效时间判断鉴权字符串是否失效,若失效则返回鉴权失败;通过调用sdk中的相同方法生成加密字符串,对比所述鉴权字符串中的加密字符串,判断二者是否一致,若不一致则返回鉴权失败,若一致则返回鉴权成功。
作为本发明所述基于OpenResty的云端鉴权实现方法的一种优选方案,其中:还包括以下步骤,若鉴权失败,所述鉴权模块返回报错信息给所述客户端;若鉴权成功,所述鉴权模块将请求转发到资源服务器;所述资源服务器根据请求返回资源信息给所述客户端。
本发明解决的另一个技术问题是:提供一种基于OpenResty的云端鉴权实现系统,实现安全鉴权的目的。
为解决上述技术问题,本发明提供如下技术方案:一种基于OpenResty的云端鉴权实现系统,其特征在于:包括,业务服务器,所述业务服务器能够进行业务的注册和生成鉴权字符串;鉴权模块,所述鉴权模块能够接受所述业务服务器的注册,以及对请求进行校验;客户端,所述客户端能够申请访问数据。
作为本发明所述基于OpenResty的云端鉴权实现系统的一种优选方案,其中:还包括资源服务器,所述资源服务器能够存储资源并将资源数据提供给所述客户端。
本发明的有益效果:本发明通过鉴权模块对鉴权字符串进行鉴权,仅在通过鉴权后才将客户端的请求发送给资源服务器,若不通过则直接将失败信息返回给客户端,从而达到保护资源的目的。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。其中:
图1为本发明第一种实施例所述基于OpenResty的云端鉴权实现方法的整体流程结构示意图。
图2为本发明第二种实施例所述基于OpenResty的云端鉴权实现系统的整体结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明,显然所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护的范围。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。
本发明结合示意图进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的剖面图会不依一般比例作局部放大,而且所述示意图只是示例,其在此不应限制本发明保护的范围。此外,在实际制作中应包含长度、宽度及深度的三维空间尺寸。
同时在本发明的描述中,需要说明的是,术语中的“上、下、内和外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一、第二或第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
本发明中除非另有明确的规定和限定,术语“安装、相连、连接”应做广义理解,例如:可以是固定连接、可拆卸连接或一体式连接;同样可以是机械连接、电连接或直接连接,也可以通过中间媒介间接相连,也可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
如在本申请所使用的,术语“组件”、“模块”、“系统”等等旨在指代计算机相关实体,该计算机相关实体可以是硬件、固件、硬件和软件的结合、软件或者运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行中的线程、程序和/或计算机。作为示例,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于执行中的过程和/或线程中,并且组件可以位于一个计算机中以及/或者分布在两个或更多个计算机之间。此外,这些组件能够从在其上具有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组(例如,来自一个组件的数据,该组件与本地系统、分布式系统中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它系统进行交互)的信号,以本地和/或远程过程的方式进行通信。
实施例1
参照图1,为本发明第一个实施例,提供了一种基于OpenResty的云端鉴权实现方法,该方法包括以下步骤,
业务服务器100在鉴权模块200注册,并返回注册结果;
客户端300向业务服务器100发起访问资源信息的请求,业务服务器100 返回一个可以通过鉴权的鉴权字符串400;
客户端300携带鉴权字符串400向鉴权模块200请求资源访问,鉴权模块 200根据鉴权字符串400校验请求的合法性,并返回响应的成功或失败信息。
具体的,鉴权模块200部署于Nginx服务器中,相对于传统的tomcat服务器,Nginx服务器更加轻便强大。业务服务器100在鉴权模块200注册时,需要携带业务服务器100的业务名称和业务版本信息,返回注册结果时,附带鉴权密钥,且鉴权密钥包括ak和sk。
当客户端300需要获取资源时,向业务服务器100发起访问资源信息的请求,此时业务服务器100通过调用sdk提供的方法生成鉴权字符串400,并将此可以通过鉴权的鉴权字符串400返回给客户端300。
其中,本领域专业人员可以理解的是,sdk提供了一种公共的方法,将打包过的对应语言sdk放入代码包中,业务服务器100能够调用并生成鉴权字符串400。
一个完整的鉴权字符串400包括版本号、接入键标识ak、当前时间、有效时间、请求头信息和加密字符串。具体的,版本号为业务服务器100注册时提供的版本号码,接入键标识ak用于标示用户,相当于非对称加密的公约,当前时间为当前对应的时间戳,单位为毫秒,有效时间的单位为毫秒,请求头信息为请求资源服务的请求头信息,加密字符串通过将安全接入键sk、版本、当前时间、有效时间和请求url通过sha256算法进行加密得到。
具体的,Sha256算法属于SHA-2下细分出的一种算法,其本质是一个哈希函数,哈希函数又称散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(或哈希值)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。
客户端300携带鉴权字符串400向鉴权模块200请求资源访问,鉴权模块 200根据鉴权字符串400校验请求的合法性,并返回响应的成功或失败信息。其中,鉴权模块200使用lua代码搭建并进行校验,lua代码是一个小巧的脚本语言,由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行,并且有一个同时进行的JIT项目,提供lua在特定平台上的即时编译功能。
具体的,对请求的合法性校验还包括以下步骤,
鉴权模块200取出请求中携带的鉴权字符串400;
判断版本号是否正确,若不正确则返回鉴权失败;
根据接入键标识ak获取对应的安全接入键sk,判断接入键标识ak是否合法,若不合法则返回鉴权失败;
根据当前时间和有效时间判断鉴权字符串是否失效,若失效则返回鉴权失败;
鉴权模块200通过调用sdk中的相同方法生成加密字符串,对比所述鉴权字符串400中的加密字符串,判断二者是否一致,若不一致则返回鉴权失败,若一致则返回鉴权成功。
鉴权成功或失败信息需要返回给发起请求的客户端300,具体的,若鉴权失败,则鉴权模块200返回报错信息给发起请求的客户端300;若鉴权成功,则鉴权模块200将请求转发到资源服务器500;资源服务器500根据请求返回资源信息给发起请求的客户端300,此时客户端300获取到资源。
本实施例中,客户通过客户端300向业务服务器100发起请求并得到业务服务器100提供的合法的鉴权字符串400,客户端300携带合法的鉴权字符串 400通过鉴权模块200的鉴权后,允许获取资源服务器500的资源,资源被返回给客户端300供正常用户使用。
将本发明提供的鉴权方案与传统的RBAC模式和OAuth模式投入实际应用中,并进行测试对比,得到的测试结果如下:
表1为本发明提供的鉴权方案和传统使用的RBAC模式、OAuth模式鉴权方案的部分性能对比:
鉴权方案 |
大小 |
扩展性 |
是否与业务解耦 |
服务器 |
响应延迟 |
本发明 |
小 |
高 |
解耦 |
Nginx |
10毫秒级 |
RBAC模式 |
大 |
低 |
耦合 |
Tomcat |
10毫秒级 |
OAuth模式 |
大 |
高 |
解耦 |
Tomcat |
100毫秒级 |
表2为Nginx和Tomcat服务器的部分指标对比:
从表1~2中可以看出,传统的鉴权方案如RBAC模式和OAuth模式,均在部分项目中存在劣势,例如RBAC模式跟业务强耦合在一起不易扩展和单独部署,而OAuth2模式尽管扩展性较高但响应延迟也较大,通过表1可以看出本发明提供的鉴权方案在多个指标中均表现良好,综合了传统鉴权模式的优点、克服了其缺陷。
此外,传统的鉴权方案中采用部署在Tomcat服务器,而本发明的鉴权模块部署于Nginx服务器上,参见表2,以及本领域技术人员应当了解的是,Nginx 服务器具有负载均衡、反向代理、处理静态文件等优势,使本发明的鉴权服务达到轻量、快速的效果。
实施例2
参照图2,为本发明的第二个实施例,该实施例提供了一种基于OpenResty的云端鉴权实现系统,上述实施例中的基于OpenResty的云端鉴权实现方法能够依托于本实施例的系统进行实现。具体的,该系统包括业务服务器100、鉴权模块200和客户端300。
其中,业务服务器100能够进行业务的注册和生成鉴权字符串400,而鉴权模块200能够接受业务服务器100的注册,并在业务服务器100完成注册之后,返回给业务服务器100鉴权的密钥,客户端300为使用时客户能够直接接触的部分,需要资源时,由客户端300向在鉴权模块200中完成注册的业务服务器100申请访问数据,业务服务器100返回能够通过鉴权模块200鉴权的鉴权字符串400给客户端300,此时客户端100再携带鉴权字符串400向鉴权模块200申请访问资源,鉴权模块200对鉴权字符串400进行一系列校验,判断客户端100的请求是否合法,若不合法,则返回鉴权失败给客户端100,拒绝客户端100访问资源,若合法,则允许客户端100进行资源的访问。
优选的,鉴权模块200融入到Nginx服务器中,不需要单独起应用服务器来启动鉴权服务
优选的,该基于OpenResty的云端鉴权实现系统还包括资源服务器500,资源服务器500能够存储资源并将资源数据提供给客户端300。客户端300携带鉴权字符串400通过鉴权模块200的鉴权后,鉴权模块200将客户端300的访问请求转发给资源服务器500,资源服务器500根据请求将其需要的资源返回给客户端300,此时客户端300能够获得资源。
正常用户在需要获取资源时,通过客户端300向业务服务器100发起请求并得到业务服务器100提供的合法的鉴权字符串400,客户端300携带合法的鉴权字符串400通过鉴权模块200的鉴权后,允许获取资源服务器500的资源,资源被返回给客户端300供正常用户使用。
应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。