身份合法性验证的方法、装置及服务器
技术领域
本发明涉及通信技术领域,尤其涉及一种身份合法性验证的方法、装置及服务器。
背景技术
随着互联网技术的飞速发展,网络侧服务器向第三方开发商开放云端平台已成为一种信息化建设的趋势。网络侧服务器面向第三方开发商开源,提供用于请求资源的应用程序编程接口(Application Programming Interface,简称API)。第三方在进行资源请求时向服务器请求调用API,通过服务器的API对相关数据进行处理。
为保证API调用的安全,在调用API前网络侧服务器需要对第三方的身份进行合法性验证,只有在验证成功后服务器才允许第三方对API进行调用。通常,在调用API之前,服务器会为已授权的第三方分配接入身份标识(Access Identity,简称Access ID)和加密密钥。在调用API时,第三方会将Access ID以及根据加密密钥生成的数字签名携带在调用请求中发送给服务器。在身份合法性验证时,服务器对第三方的调用请求进行重放攻击验证、调用频率验证以及数字签名验证等验证操作,只有这几步均验证成功时,服务器才向第三方提供API。
具体的,在接收到API调用请求后,服务器访问存储系统验证该请求是否为重放攻击,如果不为重放攻击,则进一步对该请求的调用频率进行验证。在通过调用频率验证后,服务器将该请求涉及的API数据发送给API审计系统进行审计,并更新频率控制系统中的请求频率记录。在数字签名验证环节中,服务器访问存储系统调取与Access ID对应的加密密钥,并根据该加密密钥生成服务器侧的数字签名,然后将API调用请求中携带的数字签名与生成的服务器侧的数字签名进行比对,如果两者相同,则向第三方提供API。
在实现上述身份合法性验证的过程中,发明人发现现有技术中至少存在如下问题:在进行上述验证操作时,服务器都需要对API审计系统、频率控制系统以及存储系统进行访问。如果未授权的第三方或黑客恶意生成大量无效的Access ID攻击服务器,则服务器将会对这三个系统频行繁进的访问,极易使系统产生访问瓶颈,出现拒绝服务或者系统崩溃的现象。
发明内容
本发明实施例提供一种身份合法性验证的方法、装置及服务器,能够解决因大量无效Access ID攻击导致的系统负荷过重的问题。
一方面,本实施例提供了一种身份合法性验证的方法,包括:
服务器接收第三方上报的应用程序编程接口(API)调用请求,所述API调用请求中携带有所述服务器为所述第三方预先生成并分配的接入身份标识(Access ID);
查找所述Access ID中的版本位字符,所述版本位字符用于标识校验位生成规则的版本号;
根据版本位生成规则验证所述版本位字符所标识的版本号与服务器使用的校验位生成规则的版本号是否一致;
当所述版本位字符验证成功时,查找所述Access ID中的至少一位校验位字符;
根据所述校验位生成规则分别对所述至少一位校验位字符进行验证。
另一方面,本实施例提供了一种身份合法性验证的装置,包括:
接收单元,用于接收第三方上报的应用程序编程接口(API)调用请求,所述API调用请求中携带有所述服务器为所述第三方预先生成并分配的接入身份标识(Access ID);
查找单元,用于查找所述接收单元接收的所述Access ID中的版本位字符,所述版本位字符用于标识校验位生成规则的版本号;
第一验证单元,用于根据版本位生成规则验证所述查找单元查找到的所述版本位字符所标识的版本号与服务器使用的校验位生成规则的版本号是否一致;
所述查找单元还用于当所述第一验证单元对所述版本位字符验证成功时,查找所述接收单元接收的所述Access ID中的至少一位校验位字符;
第二验证单元,用于根据所述校验位生成规则分别对所述查找单元查找到的所述至少一位校验位字符进行验证。
再一方面,本实施例提供了一种服务器,包括:输入输出电路、存储器、处理器以及总线,其中,
所述输入输出电路,用于接收第三方上报的应用程序编程接口(API)调用请求,所述API调用请求中携带有所述服务器为所述第三方预先生成并分配的接入身份标识(Access ID);
所述存储器用于存储版本位生成规则、校验位生成规则以及校验位生成规则的版本号;
所述处理器,用于查找所述输入输出电路接收的所述Access ID中的版本位字符,所述版本位字符用于标识校验位生成规则的版本号,根据所述存储器存储的版本位生成规则验证所述版本位字符所标识的版本号与所述存储器存储的校验位生成规则的版本号是否一致,当所述版本位字符验证成功时,查找所述Access ID中的至少一位校验位字符,根据所述存储器存储的所述校验位生成规则分别对所述至少一位校验位字符进行验证;
所述总线,用于连接所述输入输出电路、所述存储器以及所述处理器。
本发明实施例提供的身份合法性验证的方法、装置及服务器,能够在对API调用请求进行重放攻击验证之前,首先对API调用请求中携带的Access ID进行合法性验证。服务器查找Access ID中用于标识校验位生成规则版本号的版本位字符,然后根据版本位生成规则验证版本位字符所标识的版本号与服务器使用的校验位生成规则的版本号是否一致。该验证操作的目的在于对校验位生成规则的版本进行验证,如果版本位字符所标识的版本号与服务器生成该Access ID时使用的校验位生成规则的版本号不一致,则该Access ID为非法Access ID;如果验证结果为两者相同,则版本位字符验证成功,服务器对Access ID中的至少一位校验位字符进行验证。服务器查找Access ID中的至少一位校验位字符,根据校验位生成规则分别对至少一位校验位字符进行验证,当至少一位校验位字符验证或均验证成功时,确定该Access ID为合法Access ID。与现有技术中直接根据API调用请求进行重放攻击等验证相比,本发明实施例能够在重放攻击验证前增加对Access ID合法性验证的步骤,对携带非法Access ID的API调用请求进行剔除,仅对携带合法Access ID的API调用请求进行重放攻击等验证,由此减少服务器对API审计等系统的访问次数,进而消除因第三方恶意生成大量非法Access ID对系统造成的负荷影响。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中对API调用请求验证的流程图;
图2为本发明实施例中身份合法性验证的方法的流程图;
图3为本发明实施例中另一个身份合法性验证的方法的流程图;
图4为本发明实施例中32位Access ID的示意图;
图5为本发明实施例中确定版本位和校验位位置后的Access ID的示意图;
图6为本发明实施例中初始化字符数组的示意图;
图7为本发明实施例中确定次级字符后的Access ID的示意图;
图8为本发明实施例中一种生成字符组划分方式的示意图;
图9为本发明实施例中另一种生成字符组划分方式的示意图;
图10为本发明实施例中确定版本位字符后的Access ID的示意图;
图11为本发明实施例中确定版本位字符和校验位字符后的Access ID的示意图;
图12为本发明实施例中第三方随机生成的Access ID的示意图;
图13为本发明实施例中第一个身份合法性验证的装置的结构示意图;
图14为本发明实施例中第二个身份合法性验证的装置的结构示意图;
图15为本发明实施例中第三个身份合法性验证的装置的结构示意图;
图16为本发明实施例中第四个身份合法性验证的装置的结构示意图;
图17为本发明实施例中第五个身份合法性验证的装置的结构示意图;
图18为本发明实施例中第六个身份合法性验证的装置的结构示意图;
图19为本发明实施例中第七个身份合法性验证的装置的结构示意图;
图20为本发明实施例中服务器的结构示意图。
具体实施方式
下面将结合本实施例中的附图,对本实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在对本实施例进行说明前,首先对API的调用流程进行简要介绍。如图1所示,服务器在接收到第三方发送的API调用请求后,首先验证该调用请求是否为重放攻击。在进行重放攻击验证时服务器需要访问存储系统,如果该调用请求为重放攻击则报错返回,如果不为重放攻击则进行下一步调用频率验证。调用频率验证的目的在于限制同一个网间协议(Internet Protocol,简称IP)号在单位时间内的请求次数,例如当某个IP号在一分钟之内进行的调用请求超过了60次时,该IP号的第61次的调用请求将无法通过调用频率验证,本次调用请求报错返回;如果本次调用请求通过了调用频率验证,则服务器将本次调用请求的数据上报给API审计系统及频率控制系统,然后进行下一步数字签名验证。在验证数字签名时,服务器从调用请求中获取第三方提供的数字签名,然后访问存储系统获取与调用请求中Access ID对应的加密密钥,并根据获取的加密密钥生成的数字签名。最后服务器对第三方提供的数字签名和生成的数字签名进行比对,如果两者相同则为第三方分配API,如果两者不同则报错返回。
通过上述流程可以看到,在第三方请求调用API时,服务器需要多次访问API审计系统、频率控制系统以及存储系统。如果第三方通过恶意生成非法Access ID的方式向服务器发送大量无效的API调用请求,则服务器需要对上述系统进行频繁访问,容易导致系统产生瓶颈甚至发生崩溃。
为消除大量无效API调用请求对系统负荷造成的冲击,本实施例提供了一种身份合法性验证的方法,该方法主要应用于服务器侧,用以在验证重放攻击前对Access ID的合法性进行验证。如图2所示,该方法包括:
201、服务器接收第三方上报的API调用请求。
第三方开发商向网络侧服务器发送API调用请求,请求调用API的相关资源数据,该API调用请求中携带有服务器为第三方预先生成并分配的Access ID。
在第三方请求调用API之前,服务器会为授权的第三方预先生成并分配一个合法的Access ID。在请求调用API时,第三方将服务器分配的Access ID添加到在API请求中发送给服务器,由服务器对该Access ID进行合法性验证。
本实施例中,只有授权的第三方所发送的Access ID能够通过服务器的合法性验证,而未授权的第三方所发送的Access ID(例如通过私自编纂或随机生成的Access ID)由于与服务器生成的Access ID不相同,因此无法通过服务器的合法性验证。服务器后续不对其对应的API调用请求进行重放攻击等验证,由此节省因对非法API调用请求进行验证所产生的系统负荷。
202、服务器查找Access ID中的版本位字符。
服务器在为授权的第三方生成Access ID时,会在Access ID中设置一位版本位字符和至少一位校验位字符。其中,版本位字符用于标识校验位生成规则的版本号,而校验位字符则用于对Access ID中的其他字符进行验证(版本位字符除用于标识版本号以外,也能够对Access ID中的部分字符进行验证)。服务器在生成Access ID时,根据版本位生成规则生成一位版本位字符,根据校验位生成规则生成至少一位校验位字符,然后将版本位字符和校验位字符设置到Access ID中预设的字符位上。
本实施例中,服务器可以预先存储多种版本位生成规则以及多种校验位生成规则,在生成Access ID时根据网管人员的设置或者自身的脚本程序选择一种版本位生成规则和一种校验位生成规则使用,本实施例对版本位生成规则和校验位生成规则的种类及数量不做限制。
在第三方请求调用API时,服务器依次对Access ID中的版本位字符和校验位字符进行验证,即服务器首先根据版本位生成规则验证校验位生成规则的版本号是否与服务器使用的校验位生成规则的版本号相同,然后根据校验位生成规则依次对至少一位校验位字符进行验证。本步骤的目的在于在验证前对版本位字符进行查找,以便后续进行验证。
203、服务器根据版本位生成规则验证版本位字符所标识的版本号与服务器使用的校验位生成规则的版本号是否一致。
服务器根据生成版本位字符时所使用的版本位生成规则对版本位字符进行解析,获得校验位生成规则的版本号。如果解析出的版本号与服务器使用的校验位生成规则的版本号不一致,则API调用请求中携带的Access ID为非法Access ID,服务器报错返回;如果验证结果为两者一致,则服务器继续执行步骤204。例如,在生成Access ID时服务器根据校验位生成规则4生成了两位验证位字符,根据版本位生成规则1以及校验位生成规则的版本号4生成了一位版本位字符。在验证Access ID时,如果服务器根据版本位生成规则1解析出的版本号为4,则版本位字符验证成功;如果服务器根据版本位生成规则1解析出的版本号不为4,例如为3,则版本位字符验证失败。
在实际应用中,版本位字符验证失败的可能性是存在的。譬如,服务器在生成Access ID时使用校验位生成规则4生成校验位字符,在将生成的Access ID发送给第三方后,校验位生成规则4被黑客恶意破解,则服务器根据新的校验位生成规则,例如校验位生成规则3重新生成新的Access ID并发送给第三方,而此前发送给第三方的Access ID失效作废。如果第三方使用失效的Access ID调用API,即第三方使用服务器根据校验位生成规则4生成的Access ID请求API,则在本步骤中版本位字符验证失败。
204、当版本位字符验证成功时,服务器查找Access ID中的至少一位校验位字符。
在版本位字符验证成功后,即在校验位生成规则校验一致后,服务器根据生成Access ID时使用的校验位生成规则对至少一位校验位进行验证。本步骤的目的在于对校验位字符进行查找,以便后续进行验证。
205、服务器根据校验位生成规则分别对至少一位校验位字符进行验证。
在生成Access ID时服务器使用校验位生成规则2生成校验位字符,本步骤中服务器根据校验位生成规则2对至少一位校验位字符依次进行验证。如果至少一位校验位字符验证成功或者均验证成功,则API调用请求中的Access ID为合法Access ID,服务器继续对API调用请求进行重放攻击等验证;如果有至少一位校验位字符验证失败,则服务器报错返回。本实施例中,所述至少一位校验位字符验证成功或者均验证成功,是指当有一位校验位字符时,该校验位字符验证成功,当有两位以上校验位字符时,所有校验位字符均验证成功。
本实施例中,校验位字符是根据Access ID中的其他字符生成得到的,校验位字符与其他字符之间存在关联关系。如果校验位字符验证成功,则证明第三方上报的Access ID中的字符与服务器为授权第三方生成的Access ID中的字符对应相同,因此得出Access ID合法的验证结果;如果校验位字符验证失败,则证明第三方上报的Access ID中至少有一位字符与服务器为授权第三方生成的Access ID中对应的字符不相同,因此得出Access ID不合法的验证结果。本实施例中所述的其他字符是指Access ID中除版本位字符和校验位字符以外的字符,在本实施例后续的说明中,统一以次级字符或次级字符位字符替代说明。
本发明实施例提供的身份合法性验证的方法,能够在重放攻击验证之前,对API调用请求中的Access ID进行合法性验证。该Access ID为服务器事先为授权的第三方生成的Access ID。在合法性验证时,服务器首先对Access ID中的版本位字符进行验证,当版本位字符验证成功时,服务器进一步对Access ID中的校验位字符进行验证。当所有校验位字符均验证成功时,确定该Access ID合法。与现有技术中直接对API调用请求进行重放攻击等验证相比,可以在重放攻击验证之前,先对API调用请求中的Access ID进行合法性验证,如果Access ID为非法Access ID则停止后续的验证步骤,直接报错返回。由此节省大量无效API调用请求对系统负荷的冲击,保证系统的正常运行。
此外,本发明实施例提供的身份合法性验证的方法,还能够有效防止未授权的第三方或者黑客暴力破解Access ID。以服务器生成32位Access ID为例,其中除版本位字符及校验位字符以外,每一位字符均可以从1至9、a至z以及A至Z共62位字符中随机产生。假设Access ID中包含1位版本位字符和2位校验位字符,那么暴力破解所需的遍历次数为62的29次方,达到10的51次方的数量级。在如此高的数量级下,黑客还需要获取版本位生成规则及校验位生成规则,其破解难度进一步加大。再者,即使不考虑生成规则,按照现有计算机的运行速度,如果进行如此该数量级的运算,其所耗费的时间也已远远超过Access ID的有效时间,因此黑客几乎无法破解成功。
进一步的,作为对图2所示方法的详细说明以及进一步扩展,本实施例还提供了一种身份合法性验证的方法,该方法同样主要应用于服务器侧,用以在验证重放攻击前对Access ID的合法性进行验证。如图3所示,该方法包括:
301、服务器根据版本位生成规则以及校验位生成规则生成Access ID。
服务器首先为授权的第三方生成一个合法的Access ID,以便第三方后续根据该Access ID向服务器请求API。本实施例中步骤301和步骤302即为在验证Access ID之前服务器生成及发送Access ID的步骤。
具体的,以32位Access ID为例,服务器生成Access ID的过程包括:
301a、服务器在Access ID中确定一位版本位以及至少一位校验位。
如图4所示,服务器首先生成一个32位的Access ID,其中字符位中暂未设置具体字符。然后服务器在这32个字符位中确定一位版本位以及至少一位校验位,本实施例以确定1位版本位以及2位校验位为例进行说明。
服务器确定版本位和校验位的依据可以是根据网管人员的设置进行确定,也可以根据预设的脚本程序自行进行确定。例如,随机选择某3个字符位作为版本位和校验位,或者从字符位1开始按照“逢十抽一”规则选择3个字符位。事例性的,如图5所示,服务器将字符位3确定为版本位,将字符位14和字符位28确定为校验位。
301b、服务器从初始化字符数组中选择多个字符作为Access ID中次级字符位的字符。
如前所述,所述次级字符位是指Access ID中除版本位和校验位以外的其他字符位,在图5中,字符位1至字符位2、字符位4至字符位13、字符位15至字符位27以及字符位29至字符位32为次级字符位。
所述初始化字符数组用于为Access ID的生成提供具体字符,由服务器事先建立。如图6所示,该初始化字符数组由数字0至9、小写字母a至z以及大写字母A至Z共62位字符组成。图6所示的初始化字符数组仅为事例性说明,实际应用中不对初始化字符数组中的字符内容及排列顺序进行限定。
服务器按照预设规则从初始化字符数组中选择字符作为Access ID中次级字符位的字符。本实施例中,以随机选择算法作为预设规则,服务器从Access ID的字符位1开始依次为每一个次级字符位随机选择字符,生成次级字符位字符后的Access ID如图7所示。
301c、服务器将多个次级字符位字符划分为至少两组生成字符组。
该至少两组生成字符组包括一组版本位生成字符组和至少一组校验位生成字符组。在本实施例中,服务器将29个次级字符位字符划分为1个版本位生成字符组和2个校验位生成字符组。
具体的,服务器按照次级字符位字符数量a、版本位数量b以及校验位数量c对次级字符位字符进行划分,得到至少两组生成字符组。在本实施例中,次级字符位字符数量a为29、版本位数量b为1、校验位数量c为2。事例性的,服务器首先为各个生成字符组分配字符数量,然后从Access ID的第一位字符开始(不包含版本位字符和校验位字符)顺序为版本位生成字符组和校验位生成字符组分配字符。服务器划分出的版本位生成字符组和校验位生成字符组如图8所示。
为提高黑客对Access ID的破解难度,在本实施例的一个优选方案中,服务器为3个生成字符组平均分配字符数量,例如服务器按照图9所示划分版本位生成字符组和校验位生成字符组。如果服务器按照图8所示方式划分生成字符组,则黑客遍历次级字符位的次数为而按照图9所示方式划分生成字符组,则黑客遍历次级字符位的次数为平均分配规则生成的Access ID破解起来(不包含版本位和校验位的破解)的遍历次数明显多于非平均分配规则生成的Access ID。这一点较为容易理解,打个比方,1×2×9=18(相当于非平均分配规则),而4×4×4=64(相当于平均分配规则),明显可以看出平均分配规则的排列组合数量多于非平均分配规则的排列组合数量。
本实施例后续以图9所示的3个生成字符组为例进行说明。
301d、服务器根据版本位生成字符组以及版本位生成规则生成版本位字符。
具体的:
步骤1、在版本位生成字符组中服务器将每个字符的位数分别与与该字符对应的美国信息交换标准代码(American Standard Code for Information Interchange,简称ASCII)相乘,获得多个一级版本位数值。
所述字符的位数可以是该字符在Access ID中的字符位位数,也可以是该字符在初始化字符数组中的字符位位数。例如对于字符“c”,其在Access ID中的字符位位数为1,而在初始化字符数组中的字符位位数则为13,本实施例中以初始化字符数组中的字符位位数为例进行说明。
对于图9所示的版本位生成字符组,服务器计算得到的9个一级版本位数值依次为:13×99(c)=1287、16×102(f)=1632、3×50(2)=150、20×106(j)=2120、7×54(6)=378、9×56(8)=504、28×114(r)=3192、2×49(1)=98、5×52(4)=260,其中乘号左边的数字为字符在初始化字符数组中的字符位位数,乘号右边的数字为字符对应的ASCII码,括号内为字符本身。
本实施例以十进制ASCII码为例进行说明,实际应用中还可以采用十六进制或八进制的ASCII码进行计算,本实施例对此不做限制。
步骤2、服务器对多个一级版本位数值求和并对62取模,得到一个二级版本位数值。
服务器对9个一级版本位数值求和得到:
1278+1632+150+2120+378+504+3192+98+260=9621,然后将9621对62取模,得到的二级版本位数值为11。
步骤3、服务器对二级版本位数值及校验位生成规则的版本号求和并对62取模,得到一个三级版本位数值。
事例性的,服务器生成Access ID时使用校验位生成规则4,即验位生成规则的版本号为4,服务器按照如下方式计算得到三级版本位数值:(11+4)/62=15,其中运算符“/”为取模运算。
步骤4、服务器在初始化字符数组中查找字符位数与三级版本位数值相同的字符位,将该字符位上的字符确定为版本位字符。
服务器在图6所示的初始化字符数组查找到第15位字符“e”作为Access ID的版本位字符,确定版本位字符的Access ID如图10所示。
301e、服务器根据至少一组校验位生成字符组以及校验位生成规则分别生成至少一个校验位字符。
生成版本位字符后,服务器按照校验位生成规则4依次生成2位校验位字符。具体的:
步骤1、服务器在一个校验位生成字符组中,将每个字符的位数分别与与该字符对应的ASCII码相乘,获得多个一级校验位数值。
以根据图9中第一校验位生成字符组生成第1位校验位字符为例,服务器计算得到的10个一级校验位数值依次为:10×57(9)=570、21×107(k)=2247、27×113(q)=3051、11×97(a)=1067、4×51(3)=204、38×66(B)=2508、36×122(z)=4392、62×90(Z)=5580、8×55(7)=440、23×109(m)=2507,其中乘号左边的数字为字符在初始化字符数组中的字符位位数,乘号右边的数字为字符对应的ASCII码,括号内为字符本身。
步骤2、服务器对多个一级校验位数值求和并对62取模,得到一个二级校验位数值。
服务器对10个一级校验位数值求和得到:
570+2247+3051+1067+204+2508+4392+5580+440+2507=22566,然后将22566对62取模,得到的二级校验位数值为60。
步骤3、服务器在初始化字符数组中查找字符位数与二级校验位数值相同的字符位,将该字符位上的字符确定为一个校验位字符。
服务器在图6所示的初始化字符数组查找到第60位字符“X”作为Access ID的第1位校验位字符。
接着,服务器根据与步骤1和步骤2相同的实现方式生成第2位校验位字符“D”,确定校验位字符的Access ID如图11所示,该Access ID为一个完成的Access ID。
302、服务器将生成的Access ID发送给第三方。
服务器将图11所示的Access ID发送给授权的第三方,以便第三方后续请求调用API使用。
303、服务器接收第三方上报的API调用请求。
当第三方请求调用API时,服务器获取API调用请求中的Access ID,该Access ID为步骤302中服务器发送给授权第三方的Access ID。
304、服务器查找Access ID中的版本位字符。
服务器根据步骤301a中确定版本位的规则查找Access ID中的版本位字符,即服务器将Access ID的第3位字符“e”确定为版本位字符。
305、服务器根据版本位生成规则验证版本位字符所标识的版本号与服务器使用的校验位生成规则的版本号是否一致。
具体的:
305a、服务器根据版本位生成规则的逆向规则对版本位字符“e”进行解析,获得版本号。
服务器首先在初始化字符数组中查找到字符“e”的字符位数15,然后按照步骤301d中步骤1和步骤2的实现方式,对图9中所示的版本位生成字符组中的每一位字符进行ASCII相乘求和,并且对62取模得到二级版本位数值11。接着服务器将字符“e”的字符位数15减去二级版本位数值11,得到版本号为4。本实施例中,如果字符“e”的字符位数减去二级版本位数值为负数,则服务器将相减得到的数值与62相加,得到版本号。
305b、服务器判断解析出的版本号与服务器使用的校验位生成规则的版本号是否相同,得出判断结果。
本实施例中,由于请求调用API的第三方为已授权的第三方,因此其发送的AccessID为合法Access ID,因而服务器根据该Access ID解析出的版本号4与服务器在步骤301e中使用的校验位生成规则4的版本号相同。当未授权的第三方或黑客暴力破解Access ID时,只要其遍历得到的版本位生成字符组与服务器所使用的版本位生成字符组相比有一位字符不同,则服务器解析出的版本号就会与服务器使用的版本号不相同。
在本实施例中,对版本位字符进行验证除了可以验证其所标识的版本号是否与服务器使用的版本号相同以外,还可以对版本位生成字符组中的9位字符进行验证。
当服务器的判断结果为解析出的版本号与服务器使用的版本号相同时,执行步骤306,进行校验位字符的验证;当服务器的判断结果为解析出的版本号与服务器使用的版本号不同时,确定第三方上报的Access ID为非法Access ID,服务器报错返回。
306、服务器查找Access ID中的校验位字符。
服务器根据步骤301a中确定校验位的规则查找Access ID中的校验位字符,即服务器将Access ID中的第14位字符“X”和第28位字符“D”分别确定为第1位校验位字符和第2位校验位字符。
307、服务器根据校验位生成规则分别对至少一位校验位字符进行验证。
对校验位字符进行验证的目的在于对Access ID中次级字符的正确性进行验证。由于1个校验位字符是由10个次级字符生成的,如果这10个次级字符中有1个次级字符与服务器生的次级字符不同,则服务器解析出的校验位字符就与其生成的校验位字符不同,因此可以对Access ID的正确性进行检测。以对第1位校验位字符进行验证为例:
步骤1、服务器根据校验位生成规则解析出校验位字符。
服务器根据生成校验位字符时使用的校验位生成规则4从Access ID中解析出校验位字符。具体的,服务器从Access ID中获取第11位字符至第21位字符(不包含第14位校验位字符),即服务器获取图9中所示的第一校验位生成字符组。然后,服务器按照步骤301e中步骤1至步骤3的实现方式,根据获取的第一校验位生成字符组解析出第1位校验位字符“X”。
步骤2、服务器将解析出的校验位字符与生成Access ID时生成的校验位字符对应进行比对。
本步骤中,服务器比对的对象分别为步骤1中解析出的校验位字符和服务器生成的校验位字符,其中服务器生成的校验位字符亦即为Access ID中第14字符位上的字符“X”。需要说明的是,步骤1中解析校验位字符的目的并非是要获取校验位字符,(如果需要获取校验位字符,直接读取Access ID中第14字符位上的字符“X”即可),服务器解析校验位字符的目的在于,根据第三方无法获知的校验位生成规则对Access ID独立进行验证,如果解析出的校验位字符与服务器此前生成的校验位字符相同,则说明Access ID中的其他字符位与生成Access ID时的次级字符位字符对应相同。本实施例中是以第三方上报合法Access ID为例进行的说明,因此服务器从该Access ID中解析出的校验位字符必然与生的校验位字符相同,亦即服务器解析出的校验位字符即为Access ID中第14字符位上的字符。但是当第三方上报的Access ID为非法Access ID时,本步骤中解析和比较校验位字符的意义就能够体现出来了。例如,第三方通过排列组合随机生成了如图12所示的Access ID,由于Access ID中的字符与服务器生的Access ID中的字符不对应相同,因此服务器根据非法Access ID中第11位字符至第21位字符(不包含第14位校验位字符)以及校验位生成规则解析出的校验位字符与服务器生成的校验位字符不同,由此可以判断出该Access ID为非法Access ID。
在比对完第14位的校验位字符后,服务器按照与步骤1和步骤2相同的实现方式对第28位的校验位字符进行比对,此处不再赘述。当2位校验位字符中有至少1位校验位字符比对不同时,服务器确定该Access ID为非法Access ID,报错返回;当2位校验位字符均比对相同时,服务器确定该Access ID为合法Access ID。
进一步的,作为本实施例的另一个优选方案,当服务器使用的校验位生成规则4被第三方破解时,服务器还可以使用新的校验位生成规则重新生成Access ID,其中在重新生成的Access ID中,新的版本位字符用于标识新的校验位生成规则的版本号。然后服务器将重新生成的Access ID发送给授权的第三方。如前所述,服务器内部存储有多种校验位生成规则,在本优选方案中,如果当前使用的校验位生成规则被第三方破解,则服务器可以根据新的校验位生成规则例如校验位生成规则2重新生成Access ID。在新的Access ID中,服务器将校验位生成规则2的版本号体现在新的版本位字符中,对于破解了校验位生成规则4的第三方而言,在其根据校验位生成规则4生成的Access ID中,版本位字符所标识的版本号为已经失效的版本号4,如果通过该Access ID请求调用API接口,则在版本位字符验证时服务器就会报错返回,由此达到更新Access ID的作用。
再进一步的,在本实施例的一个可选技术方案中,在执行完步骤307后,如果验证Access ID为合法Access ID,则服务器可以按照图1所示的流程对API调用请求做进一步的验证操作,包括重放攻击验证、调用频率验证以及数字签名验证等验证。其验证的实现方式此处不再一一赘述,当后续验证均成功时,服务器为第三方调用API。
本实施例提供的身份合法性验证的方法,能够通过版本位字符对Access ID中使用的校验位生成规则的版本进行验证,当版本验证成功时,进一步对至少一位校验位字符进行验证。由于校验位是由次级字符生成得到的,因此可以间接对Access ID中每一位次级字符的正确性进行验证,由此达到验证Access ID合法性的目的。另外,由于版本位字符也是通过次级字符生成得到的,因此对版本位字符的验证除了可以验证校验位生成规则的版本是否正确以外,也可以对生成版本位字符的次级字符的正确性进行验证。
此外,本实施例提供的身份合法性验证的方法,还可以在当前校验位生成规则被破解时灵活切换校验位生成规则,并将新规则的版本号体现在新的Access ID中发送给授权的第三方,使旧Access ID失效,由此进一步增加破解Access ID的难度。
下面对本实施例方法的可行性进行分析。要破解Access ID的验证规则需要确定版本位和校验位的位数和位置,以及版本位生成字符组和校验位生成字符组的位数。以32位Access ID中包含1位版本位、2位校验位、版本位生成字符组9位字符、校验位生成字符组10位字符为例,在不考虑版本位、校验位的位置以及生成字符组中字符排列组合的前提下,黑客成功破解Access ID的概率为:
此外,由于版本位个数、校验位个数、版本位生成字符组中字符个数以及校验位生成字符组中字符个数均可变,因此成功破解Access ID的概率更低。另外,在实际应用中由于版本位生成规则和校验位生成规则均可以灵活变动,因此,黑客意图破解Access ID几乎不存在可能性。
参考图3所示方法的实现,本实施例还提供了一种身份合法性验证的装置,该装置可以位于网络侧服务器内部,用以对图3所示的方法进行实现。如图13所示,所述装置包括:接收单元131、查找单元132、第一验证单元133以及第二验证单元134,其中,
所述接收单元131,用于接收第三方上报的应用程序编程接口(API)调用请求,所述API调用请求中携带有所述服务器为所述第三方预先生成并分配的接入身份标识(Access ID);
所述查找单元132,用于查找所述接收单元131接收的所述Access ID中的版本位字符,所述版本位字符用于标识校验位生成规则的版本号;
所述第一验证单元133,用于根据版本位生成规则验证所述查找单元132查找到的所述版本位字符所标识的版本号与服务器使用的校验位生成规则的版本号是否一致;
所述查找单元132还用于当所述第一验证单元133对所述版本位字符验证成功时,查找所述接收单元131接收的所述Access ID中的至少一位校验位字符;
所述第二验证单元134,用于根据所述校验位生成规则分别对所述查找单元132查找到的所述至少一位校验位字符进行验证。
进一步的,如图14所示,所述装置还包括生成单元141及发送单元142;
所述生成单元141,用于在所述接收单元131接收所述接收第三方上报的API调用请求之前,根据所述版本位生成规则以及所述校验位生成规则生成所述Access ID;
所述发送单元142,用于将所述生成单元141生成的所述Access ID发送给所述第三方。
进一步的,如图15所示,所述生成单元141包括确定子单元151、选择子单元152、划分子单元153、第一生成子单元154以及第二生成子单元155;
所述确定子单元151,用于在所述Access ID中确定一位版本位以及至少一位校验位;
所述选择子单元152,用于从初始化字符数组中选择多个字符作为所述Access ID中次级字符位的字符,其中,所述次级字符位为所述Access ID中除所述确定子单元151确定的所述版本位以及所述校验位以外的其他字符位;
所述划分子单元153,用于将所述选择子单元152选择的所述多个次级字符位字符划分为至少两组生成字符组,所述至少两组生成字符组包括一组版本位生成字符组和至少一组校验位生成字符组;
所述第一生成子单元154,用于根据所述划分子单元153划分的所述版本位生成字符组以及所述版本位生成规则生成版本位字符;
所述第二生成子单元155,用于根据所述划分子单元153划分的所述至少一组校验位生成字符组以及所述校验位生成规则分别生成至少一个校验位字符。
进一步的,如图16所示,所述生成单元141还包括建立子单元161;
所述建立子单元161,用于所述确定子单元151在所述Access ID中确定一位版本位以及至少一位校验位之前,建立初始化字符数组,所述初始化字符数组由数字0至9、小写字母a至z以及大写字母A至Z共62位字符组成。
进一步的,所述划分子单元153,用于按照次级字符位字符数量a、版本位数量b以及校验位数量c对所述次级字符位字符进行划分,得到所述至少两组生成字符组。
进一步的,所述第一生成子单元154,用于:
在所述版本位生成字符组中,将每个字符的位数分别与与该字符对应的美国信息交换标准代码(ASCII)相乘,获得多个一级版本位数值;
对所述多个一级版本位数值求和并对62取模,得到一个二级版本位数值;
对所述二级版本位数值及所述校验位生成规则的版本号求和并对62取模,得到一个三级版本位数值;
在所述初始化字符数组中查找字符位数与所述三级版本位数值相同的字符位,将该字符位上的字符确定为所述版本位字符。
进一步的,所述第二生成子单元155,用于:
在一个校验位生成字符组中,将每个字符的位数分别与与该字符对应的ASCII码相乘,获得多个一级校验位数值;
对所述多个一级校验位数值求和并对62取模,得到一个二级校验位数值;
在所述初始化字符数组中查找字符位数与所述二级校验位数值相同的字符位,将该字符位上的字符确定为一个校验位字符。
进一步的,如图17所示,所述第一验证单元133包括第一解析子单元171以及判断子单元172;
所述第一解析子单元171,用于根据所述版本位生成规则的逆向规则对所述版本位字符进行解析,获得版本号;
所述判断子单元172,用于判断所述第一解析子单元171解析出的版本号与服务器使用的校验位生成规则的版本号是否相同,得出判断结果;
所述第一验证单元133还用于当所述判断结果为相同时,指示所述第二验证单元134进行校验位字符的验证;
所述第一验证单元133还用于当所述判断结果为不同时,确定所述Access ID为非法Access ID。
进一步的,如图18所示,所述第二验证单元134还包括:
第二解析子单元181,用于根据所述校验位生成规则分别解析出至少一个校验位字符;
比对子单元182,用于将所述第二解析子单元181解析出的校验位字符分别与生成所述Access ID时生成的至少一个校验位字符对应进行比对;
所述第二验证单元134还用于当所有校验位均比对相同时,确定所述Access ID为合法Access ID;
所述第二验证单元134还用于当有至少一位校验位比对不同时,确定所述AccessID为非法Access ID。
进一步的,所述生成单元141还用于在所述发送单元142将所述Access ID 发送给所述第三方的之后,当所述校验位生成规则被第三方破解时,使用新的校验位生成规则重新生成Access ID,其中在重新生成的Access ID中,新的版本位字符用于标识新的校验位生成规则的版本号;
所述发送单元142还用于将所述生成单元141重新生成的Access ID发送给所述第三方。
进一步的,如图19所示,所述装置还包括第三验证单元191;
所述第三验证单元191,用于当所述第二验证单元134验证所述Access ID为合法Access ID时,对所述接收单元131接收的所述API调用请求进行重放攻击验证。
本实施例提供的身份合法性验证的装置,能够通过版本位字符对Access ID中使用的校验位生成规则的版本进行验证,当版本验证成功时,进一步对至少一位校验位字符进行验证。由于校验位是由次级字符生成得到的,因此可以间接对Access ID中每一位次级字符的正确性进行验证,由此达到验证Access ID合法性的目的。另外,由于版本位字符也是通过次级字符生成得到的,因此对版本位字符的验证除了可以验证校验位生成规则的版本是否正确以外,也可以对生成版本位字符的次级字符的正确性进行验证。
此外,本实施例提供的身份合法性验证的装置,还可以在当前校验位生成规则被破解时灵活切换校验位生成规则,并将新规则的版本号体现在新的Access ID中发送给授权的第三方,使旧Access ID失效,由此进一步增加破解Access ID的难度。
参考图3所示方法的实现,本实施例还提供了一种服务器,该服务器位于网络侧,用以对图3所示的方法进行实现。如图20所示,所述服务器包括:输入输出电路201、存储器202、处理器203以及总线204,其中,
所述输入输出电路201,用于接收第三方上报的应用程序编程接口(API)调用请求,所述API调用请求中携带有所述服务器为所述第三方预先生成并分配的接入身份标识(Access ID);
所述存储器202用于存储版本位生成规则、校验位生成规则以及校验位生成规则的版本号;
所述处理器203,用于查找所述输入输出电路201接收的所述Access ID中的版本位字符,所述版本位字符用于标识校验位生成规则的版本号,根据所述存储器202存储的版本位生成规则验证所述版本位字符所标识的版本号与所述存储器202存储的校验位生成规则的版本号是否一致,当所述版本位字符验证成功时,查找所述Access ID中的至少一位校验位字符,根据所述存储器202存储的所述校验位生成规则分别对所述至少一位校验位字符进行验证;
所述总线204,用于连接所述输入输出电路201、所述存储器202以及所述处理器203。
本实施例提供的服务器,能够通过版本位字符对Access ID中使用的校验位生成规则的版本进行验证,当版本验证成功时,进一步对至少一位校验位字符进行验证。由于校验位是由次级字符生成得到的,因此可以间接对Access ID中每一位次级字符的正确性进行验证,由此达到验证Access ID合法性的目的。另外,由于版本位字符也是通过次级字符生成得到的,因此对版本位字符的验证除了可以验证校验位生成规则的版本是否正确以外,也可以对生成版本位字符的次级字符的正确性进行验证。
此外,本实施例提供的服务器,还可以在当前校验位生成规则被破解时灵活切换校验位生成规则,并将新规则的版本号体现在新的Access ID中发送给授权的第三方,使旧Access ID失效,由此进一步增加破解Access ID的难度。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。