一种鉴权方法及系统与流程

文档序号:12789558阅读:469来源:国知局
一种鉴权方法及系统与流程

本发明涉及通信技术领域,更具体地,涉及一种鉴权方法及系统。



背景技术:

目前,互联网软件产品从产品受众主要划分为两大类,包括面向终端消费者的大众类互联网产品,例如新浪微博Web端、知乎Web端等。这类产品的特点在于使用该类产品的对象是人类,大部分提供的媒体内容为无结构化的文本(例如小说、博客)、图片、音视频等。另一类产品面向的受众是计算机,即服务主要形式为提供编程接口的API(Application Programming Interface,应用程序接口),方便程序员利用该API进行二次开发。这类产品的特点在于服务的对象为计算机,提供的媒体内容大部分为结构化的文本,例如XML、JSON等。

鉴权(authentication)是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是,每个获得密码的用户都已经被授权。在建立用户时,就为此用户分配一个密码,用户的密码可以由管理员指定,也可以由用户自行申请。这种方式的弱点十分明显:一旦密码被偷或用户遗失密码,情况就会十分麻烦,需要管理员对用户密码进行重新修改,而修改密码之前还要人工验证用户的合法身份。为了克服这种鉴权方式的缺点,需要一个更加可靠的鉴权方式。目前的主流鉴权方式是利用认证授权来验证数字签名的正确与否。

针对API型产品,目前对于接入其的对应用户终端鉴权常见的做法是利用相应的鉴权加密算法,生成与用户终端请求信息相对应的鉴权加密字符串与用户终端发送的请求信息一同发送给需要访问的服务器,服务器利用PHP(ertext Preprocessor,“超文本预处理器”)是一种通用开源脚本语言,进行鉴权操作。

然而,不同的大型科技公司由于自身安全考虑,都会设计各自的鉴权加密算法;同时,利用PHP进行鉴权操作不能满足很多情形下对于鉴权效率的更高要求。



技术实现要素:

本发明为克服上述问题或者至少部分地解决上述问题,提供一种鉴权方法及系统。

根据本发明的一个方面,提供一种鉴权方法,包括:

步骤1,在所述客户终端HTTP请求Header头信息中添加HTTP请求中API接口公钥、当前客户终端时刻和鉴权加密字符串;

步骤2,接收所述客户终端HTTP请求,确认所述Header头信息中API接口公钥正确,确认所述客户终端时刻与当前服务器时刻差值小于预设阈值;

步骤3,确认所述鉴权加密字符串正确。

根据本发明的另一个方面,提供一种鉴权系统,包括加密模块、第一确认模块和第二确认模块:

所述加密模块与所述第一确认模块相连,用于生成鉴权加密字符串;在所述客户终端HTTP请求Header头信息中添加API接口公钥、当前客户终端时刻和鉴权加密字符串;

所述第一确认模块分别与所述加密模块和第二确认模块相连,用于接收所述客户终端HTTP请求,确认所述API接口公钥正确;确认所述客户终端时刻与当前服务器时刻差值小于预设阈值;

所述第二确认模块与所述第一确认模块相连,用于确认所述鉴权加密字符串正确。

本申请提出一种鉴权方法及系统,所述方法在客户终端HTTP请求Header头信息中添加鉴权信息,Nginx。本发明具有如下有益效果:1、将鉴权信息加入HTTP请求Header头信息中,不会导致HTTP请求Header头信息中Url不一致;2、特殊的鉴权加密字符串生成算法能够有效的防止第三方的恶意模仿。

附图说明

图1为根据本发明实施例一种鉴权方法的整体流程示意图;

图2为根据本发明实施例一种鉴权方法的流程示意图;

图3为根据本发明实施例一种鉴权系统的整体框架示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

首先对于本发明具体实施例中涉及到的一些技术名词进行说明。

HTTP:从客户端到服务器端的请求消息。

Header:HTTP请求中所携带的Header头信息。

API(Application Programming Interface,应用程序编程接口):是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

公钥AID:API接口加密使用的公钥。

秘钥AID:API接口加密使用的秘钥,不对外,由服务器端提供。

MD5:Message Digest Algorithm MD5(信息-摘要算法5)。

GET请求:HTTP客户端发送请求的类型,表示向Web服务器请求一个文件。

Post请求:HTTP客户端发送请求的类型,表示向Web服务器发送数据让Web服务器进行处理。

鉴权加密字符串:根据一定规则生产的用于鉴权的加密字符串。

Nginx:是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务。

Proxy_cache:Nginx自带的内置缓存模块。

Url:统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。

lua是一个小巧的脚本语言,一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。

如图1,示出本发明一个具体实施例中一种鉴权方法总体流程示意图。整体上,包括以下步骤:步骤1,在所述客户终端HTTP请求Header头信息中添加HTTP请求中API接口公钥、当前客户终端时刻和鉴权加密字符串;步骤2,接收所述客户终端HTTP请求,确认所述API接口公钥正确;确认所述客户终端时刻与当前服务器时刻差值小于预设阈值;步骤3,确认所述鉴权加密字符串正确。

在本发明上述具体实施例中,将加密信息客户终端HTTP请求Header头信息中不会导致HTTP请求Url不一致,不会因为请求Url不一致导致命中不了服务器缓存。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤1中鉴权加密字符串通过以下步骤生成:S11,将所述HTTP请求中的统一资源标识符的第一个字符“/”删除;S12,将删除字符“/”得到的字符串和HTTP请求中API接口公钥、客户终端时刻,和所述客户终端HTTP请求中的get参数字符串按照预设排序规则进行排序;将所述排序后各字符串按顺序进行拼接;S13,在所述拼接后得到的字符串中指定位置插入API接口秘钥;得到鉴权加密字符串;将所述鉴权加密字符串转换为MD5码。

在本发明上述具体实施例中,通过特殊生成规则生成的鉴权加密字符串可以有效防止第三方爬虫或恶意攻击的侵扰,从而提高被访问服务器的安全性。由于MD5是一种不可逆的加密算法,安全性很高,广泛被用作判断文件完整性;所以将生成的鉴权加密字符串转换为MD5码,能够有效的防止最终鉴权加密字符串被反向破解,更高程度的保证了鉴权加密字符串的安全有效性。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤2前还包括:确认所述客户终端HTTP请求Header头信息中同时包含API接口公钥、客户终端时刻和鉴权加密字符串。完成上述步骤后再执行步骤2的确认过程,避免在三个字段不全的全框架就执行步骤2确认操作,浪费不必要的服务器资源与时间。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤3前还包括:将客户身份信息加入API接口公钥中,根据API接口公钥访问权限确认所述客户终端具有所述HTTP请求的权限。在本实施例中,可以将客户的身份信息加入所述API接口钥匙对中,需要执行所述步骤3的鉴权加密字符串操作前,检查所述HTTP请求包含的API接口公钥中的身份信息对应的访问权限是否能够支持所述客户终端具有所述HTTP请求的权限。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤1中生成鉴权加密字符串还包括:S11’,确认所述HTTP请求中包含post信息;S12’,将所述post信息参数字符串与所述删除第一个字符“/”的统一资源标识符、API接口公钥、客户终端时刻和客户终端HTTP请求中的get参数字符串进行拼接,拼接后将上述各字符按预设排序规则进行排序;S13’,在排序后获得的字符串指定位置插入API接口秘钥,获得鉴权加密字符串;将所述鉴权加密字符串转换为MD5码。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤2中的预设阈值≤5分钟。本实施例中预设阈值设置为5分钟的原因为:每次HTTP请求的Url都是有时间限制的,即使Url被抓包抓到了,最多也只能使用5分钟时间。所以,为了保证被鉴权后的HTTP请求还是有效的,应当将所述预设阈值设置为不超过5分钟。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤1中预设排序规则为:按照所述各字符串首字母的升/降序进行排序。本实施例中的排序规则只是其中一种,将各字符串首字母在26字母表中的升/降序进行排序。本发明在实际操作不限于上述两种排序规则,只要是固定的打乱排序规则都能够实现本发明的字符串排序目的。

图2中,示出本发明另一个具体实施例一种鉴权方法整体流程示意图。总体上,包括以下步骤:

客户终端在HTTP请求Header头中附加公钥aid、客户端当前请求时间戳time、鉴权加密字符串auth。

上述具体加密auth生成算法如下:(1)请求的接口地址uri(即/api/thirdPart/live)部分,从第二位开始截取(即api/v1/live);(2)上述步骤获得的字符串与get参数、公钥aid和time拼接后,根据各参数字符串首字母名升序排序。所述公钥aid中包含客户身份信息。(3)在用户HTTP请求中包含post数据时,上一步骤排序后用&符号连接到get参数字符串后再进行上一步骤的排序操作,随后将秘钥插入所述字符串中指定位置,最后得出加密的字符串(api/thirdPart/live?aid=xxx&limit=10&offset=30&time=146 8897751+客户端密钥KEY+post参数字符串);并将所述字符串转换为MD5码。

服务器Nginx中lua模块检查Header里面是否同时包含aid、time、auth三个字段;服务器检查公钥aid的合法性;服务器检查客户端传过来的time和服务器的time误差是否在5分钟之内;服务器检查公钥AID访问权限范围;检查鉴权字符串是否正确。

利用Nginx的proxy_cache缓存功能,如果没有命中缓存就代理到php里面处理业务逻辑,命中了就直接返回。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤2、3由Web服务器Nginx中的脚本语言lua模块执行。

Nginx:是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。Lua是一个小巧的脚本语言,一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua脚本处理的速度是最快的。将Lua实现的鉴权操作脚本作为一个模块嵌在所述Nginx中执行步骤2、3的鉴权操作相比现有技术中直接在PHP实现的鉴权操作中进行鉴权速度有明显的提升。

在本发明另一个具体实施例中,一种鉴权方法,所述步骤3后还包括:当所述HTTP请求的获取目标信息不在服务器缓存中时,利用所述Web服务器Nginx中的缓存模块proxy_cache代理到超文本预处理器中处理业务逻辑。Proxy_cache为Nginx自带的内置缓存模块。当所述HTTP请求没有在服务器缓存中获取到想要的信息时,Proxy_cache就代理到PHP处理业务逻辑。如果用户终端HTTP请求命中了服务器缓存就直接返回其需要的内容。

图3中,示出本发明一个具体实施例中一种鉴权系统整体结构示意图。总体上,包括加密模块A1、第一确认模块A2和第二确认模块A3:所述加密模块A1与所述第一确认模块A2相连,用于生成鉴权加密字符串;在所述客户终端HTTP请求Header头信息中添加API接口公钥、当前客户终端时刻和鉴权加密字符串;所述第一确认模块A2分别与所述加密模块A1和第二确认模块A3相连,用于接收所述客户终端HTTP请求,确认所述API接口公钥正确;确认所述客户终端时刻与当前服务器时刻差值小于预设阈值;所述第二确认模块A3与所述第一确认模块A2相连,用于确认所述鉴权加密字符串正确。

在本发明上述具体实施例中,将加密信息客户终端HTTP请求Header头信息中不会导致HTTP请求Url不一致,不会因为请求Url不一致导致命中不了服务器缓存。

在本发明另一个具体实施例中,一种鉴权系统,所述加密模块A1还包括鉴权加密字符串生成单元,用于将所述HTTP请求中的统一资源标识符的第一个字符“/”删除;将删除字符“/”得到的字符串和HTTP请求中API接口公钥、客户终端时刻和所述客户终端HTTP请求中的get参数字符串按照预设排序规则进行排序;将所述排序后各字符串按顺序进行拼接;在所述拼接后得到的字符串中指定位置插入API接口秘钥;得到鉴权加密字符串;将所述鉴权加密字符串转换为MD5码。

在本发明上述具体实施例中,鉴权加密字符串生成单元通过特殊生成规则生成的鉴权加密字符串可以有效防止第三方爬虫或恶意攻击的侵扰,从而提高被访问服务器的安全性。由于MD5是一种不可逆的加密算法,安全性很高,广泛被用作判断文件完整性;所以将生成的鉴权加密字符串转换为MD5码,能够有效的防止最终鉴权加密字符串被反向破解,更高程度的保证了鉴权加密字符串的安全有效性。

在本发明另一个具体实施例中,一种鉴权系统,所述第一确认单元还用于:确认所述客户终端HTTP请求Header头信息中同时包含API接口公钥、客户终端时刻和鉴权加密字符串。完成上述步骤后再执行步骤2的确认过程,避免在三个字段不全的全框架就执行步骤2确认操作,浪费不必要的服务器资源与时间。

在本发明另一个具体实施例中,一种鉴权系统,所述加密模块A1还用于将客户身份信息加入API接口公钥中;所述第一确认模块还用于根据API接口公钥访问权限确认所述客户终端具有所述HTTP请求的权限。在本实施例中,可以将客户的身份信息加入所述API接口钥匙对中,需要执行所述步骤3的鉴权加密字符串操作前,检查所述HTTP请求包含的API接口公钥中的身份信息对应的访问权限是否能够支持所述客户终端具有所述HTTP请求的权限。

在本发明另一个具体实施例中,一种鉴权系统,所述加密模块还用于确认所述HTTP请求中包含post信息,将所述post信息参数字符串与所述删除第一个字符“/”的统一资源标识符、API接口公钥、客户终端时刻和客户终端HTTP请求中的get参数字符串进行拼接,拼接后将上述各字符按预设排序规则进行排序;在排序后获得的字符串指定位置插入API接口秘钥,获得鉴权加密字符串;将所述鉴权加密字符串转换为MD5码。本发明具体实施例中,考虑到了当客户终端发送的HTTP请求中包含有POST信息时,可以将POST信息一起加入鉴权加密字符串中进行排序,从而增加鉴权加密字符串的复杂性,进而进一步提高服务器的安全性。

在本发明另一个具体实施例中,一种鉴权系统,所述第一确认模块中的预设阈值≤5分钟。本实施例中预设阈值设置为5分钟的原因为:每次HTTP请求的Url都是有时间限制的,即使Url被抓包抓到了,最多也只能使用5分钟时间。所以,为了保证被鉴权后的HTTP请求还是有效的,应当将所述预设阈值设置为不超过5分钟。

在本发明另一个具体实施例中,一种鉴权系统,所述加密模块中的预设排序规则为:按照所述各字符串首字母的升/降序进行排序。本实施例中的排序规则只是其中一种,将各字符串首字母在26字母表中的升/降序进行排序。本发明在实际操作不限于上述两种排序规则,只要是固定的打乱排序规则都能够实现本发明的字符串排序目的。

在本发明另一个具体实施例中,一种鉴权系统,所述第一确认模块、第二确认模块由Web服务器Nginx中的脚本语言lua模块实现。Nginx:是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。Lua是一个小巧的脚本语言,一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua脚本处理的速度是最快的。将Lua实现的鉴权操作脚本作为一个模块嵌在所述Nginx中执行步骤2、3的鉴权操作相比现有技术中直接在PHP实现的鉴权操作中进行鉴权速度有明显的提升。

在本发明另一个具体实施例中,一种鉴权系统,还包括代理模块,与所述第二确认模块A3相连,用于当所述HTTP请求的获取目标信息不在服务器缓存中时,利用所述Web服务器Nginx中的缓存模块proxy_cache代理到超文本预处理器中处理业务逻辑。Proxy_cache为Nginx自带的内置缓存模块。当所述HTTP请求没有在服务器缓存中获取到想要的信息时,Proxy_cache就代理到PHP处理业务逻辑。如果用户终端HTTP请求命中了服务器缓存就直接返回其需要的内容。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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