基于服务器获取认证令牌的方法及系统的制作方法

文档序号:7869751阅读:207来源:国知局
专利名称:基于服务器获取认证令牌的方法及系统的制作方法
技术领域
本发明涉及安全认证技术,尤其涉及一种基于服务器获取认证令牌的方法及系统。
背景技术
随着计算机网络通信技术的发展,通过点对点的技术来实现互联网上的即时沟通的即时通信(IM, Instant Messaging)软件工具应用越来越普遍,IM已经被大多数的用户所接受并成为微博用户日常生活以及工作中必不可少的一部分,用户通过頂软件,可以实现与朋友、同事以及同学之间的交流与沟通。微博服务器平台作为IM工具应用的一部分,对外以接口的方式向第三方提供丰富的功能接口,例如,对于第三方而言,可以采用开放授权(Oauth)的认证方式,进行认证必选接口的调用,从而完成认证。但在微博服务器平台内部,通常包含有多个服务器,为了扩展服务器功能,要求认证的第三方通过已认证的服务器,能够从其它服务器获取该第三方请求的数据。这样,为了保障数据交互的安全性,多个服务器之间也需要进行相互安全认证,即在微博服务器平台内部,各服务器需要建立相互信任关系,在建立相互信任关系的基础上,对来自其他服务器的第三方进行安全认证,从而使得外部的第三方,通过Oauth的认证方式,获取服务器的调用权限,而基于微博服务器平台内部各服务器之间建立的相互信任关系,可以通过其他服务器,对服务器发送的认证请求中携带的第三方信息,对该第三方进行认证,从而使该其他服务器获取第三方所需的数据,实现微博服务器平台内部服务器的功能扩展。但是,其他服务器对该第三方的认证,如果采用外部第三方与服务器通过Oauth认证的方式,会出现重复认证的问题,使得认证过程较为繁琐、认证所需时间较长,使得认证效率较低。为了减少认证流程,微博服务器平台内部改进的认证方式是服务器双方约定共同密钥(secretKey),根据共同密钥联合请求参数生成签名(sign),通过对sign的检查,保证认证请求的合法性,以确保建立相互信任关系,从而实现服务器间的安全调用。图1为现有基于服务器的认证方法流程示意图。参见图1,以服务器A (ServerA)以及服务器B (ServerB)为例,该流程包括步骤101, ServerA 与 ServerB 预先约定共同密钥 secretKey ;步骤102, ServerA向ServerB发送认证请求,携带第一签名参数;本步骤中,为了便于ServerB验证请求来自与ServerA, ServerA需要传送第一传送参数(paraml)以及第二传递参数(param2),以便生成第一签名参数signl = MD5_hash(paraml + param2 + secretKey),这样,ServerB就可以采用同样的算法,对sign进行校验。第一传送参数、第二传递参数可以是经过ServerA认证的用户标识(ID)。较佳地,为了防止重放攻击,在认证请求中,还可以增加一个随机参数random。这样,ServerA向ServerB发送的认证请求中,携带的参数包括random以及signl = MD5_hash (paraml + param2 + random + secretKey)。步骤103, ServerB接收ServerA认证请求,根据认证请求中携带的参数进行认证。本步骤中,如果认证请求中,携带参数signl,则对signl进行解析,得到paraml1、paraml 2,根据与ServerA相同的签名算法,生成第二签名参数sign2 = MD5_hash(paramlI + paraml2 + secretKey);如果认证请求中,携带参数random以及signl,则对signl进行解析,得到paraml1、paraml 2,根据与ServerA相同的签名算法以及接收的random,生成第二签名参数sign2 = MD5_hash (paramlI + paraml2 + random + secretKey)。比较第一签名参数以及第二签名参数,如果相等,则认证通过,否则,认证不通过。由上述可见,现有基于服务器的认证方法,只需服务器认证双方约定的共同密钥不丢失,就可以简单方便地保证认证双方通信的安全性,在一定程度上达到了服务器间轻量级快速认证的需求,减少了认证流程,但对secetKey的保密性要求较高,在当前各公司人员流动较大的背景下,一旦有人员变动,为了防止公司数据信息的泄密,需要通过人工沟通,与认证对方进行协商,并更换预先协商的secretKey,从而造成认证双方频繁的程序或配置更改,共同密钥维护较为繁琐;而如果不及时更换,又会导致认证的安全性较低。

发明内容
本发明的实施例提供一种基于服务器获取认证令牌的方法,实现自动配置共同密钥,提高认证的安全性。本发明的实施例还提供一种基于服务器获取认证令牌的系统,实现自动配置共同密钥,提高认证的安全性。为达到上述目的,本发明实施例提供的一种基于服务器获取认证令牌的方法,包括 建立相互信任关系的第一服务器与第二服务器协商,生成初始共同密钥作为认证令牌并存储;在预先设置的时间周期到时,第二服务器生成随机数,并将随机数作为参数进行令牌请求接口的调用;第一服务器接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储的认证令牌;第二服务器解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储的认证令牌。其中,所述方法进一步包括第二服务器接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串;第一服务器接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。其中,采用建立认证令牌与服务器标识的映射关系的方式,存储所述认证令牌。
其中,所述根据分配的当前认证令牌更新存储的认证令牌包括第一服务器在对当前认证令牌进行加密的同时或之后,用分配的当前认证令牌替换存储的认证令牌。其中,所述根据分配的当前认证令牌更新存储的认证令牌包括将初始共同密钥与分配的当前认证令牌分别进行存储。其中,在所述分配当前认证令牌之后,对当前认证令牌进行加密之前,该方法进一步包括查询是否存储有前一时间周期内的认证令牌,如果没有,以存储的初始共同密钥为前一时间周期内的认证令牌。其中,通过当前认证令牌和用户标识生成所述认证属性字符串包括通过当前认证令牌以及用户标识,生成第一签名摘要;

通过第一签名摘要以及用户标识,生成第一认证字符串;通过对第一认证字符串进行编码,携带当前认证令牌标识,生成认证属性字符串。其中,所述通过当前认证令牌以及用户标识,生成第一签名摘要包括采用消息摘要算法第五版哈希算法,对用户标识以及当前认证令牌进行运算,得到第一签名摘要。其中,所述认证属性字符串格式为String authorizationValue=〃Token〃+new String (Base64.encodeBase64(authStr. getByte ("utf-8")),"utf-8");其中,Token表示采用Token认证方式;new String (Base64. encodeBase64 (authStr. getByte ("utf_8")), " utf-8")表示采用8比特的Unicode的可变长度字符编码对authStr进行编码。其中,所述进行认证属性字符串验证包括第一服务器获取HTTP请求中携带的认证属性字符串,根据认证属性字符串中的Token,确定米用Token认证方式,对认证属性字符串中的new String (Base64.encodeBase64 (authStr. getByte (〃utf_8〃)), 〃utf_8〃)进行解码,获取 authStr,根据authStr的格式,分别获取用户标识以及signStr,根据获取的用户标识以及预先存储的当前认证令牌,生成第二签名摘要;比较弟一签名摘要和弟_■签名摘要是否相问,如果相问,表明认证通过;如果不相同,表明认证失败。一种基于服务器获取认证令牌的系统,该系统包括第一服务器以及第二服务器,其中,第一服务器,用于与建立相互信任关系的第二服务器协商,生成初始共同密钥作为认证令牌并存储;接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储的认证令牌;第二服务器,用于与建立相互信任关系的第一服务器协商,生成初始共同密钥作为认证令牌并存储;在预先设置的时间周期到时,生成随机数,并将随机数作为参数进行令牌请求接口的调用;解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储的认证令牌。较佳地,所述第二服务器进一步用于接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串;相应地,第一服务器进一步用于接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。较佳地,所述第一服务器包括协商模块、存储模块、认证请求处理模块以及验证模块,其中,协商模块,用于与建立相互信任关系的第二服务器协商,生成初始共同密钥作为认证令牌,输出至存储模块;存储模块,用于存储作为认证令牌的初始共同密钥;

认证请求处理模块,用于接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储模块存储的认证令牌;验证模块,用于接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。较佳地,所述验证模块包括认证属性字符串获取单元、解码单元、第一签名摘要获取单元、第二签名摘要获取单元以及比较单元,其中,认证属性字符串获取单元,用于接收HTTP请求,获取HTTP请求中携带的认证属性字符串;解码单元,用于根据认证属性字符串中的令牌标识,确定采用令牌认证方式,对认证属性字符串进行解码,获取第一认证字符串,输出至第一签名摘要获取单元;第一签名摘要获取单元,用于根据认证字符串的格式,从接收的第一认证字符串中,分别获取用户标识以及第一签名摘要;第二签名摘要获取单元,用于根据第一签名摘要获取单元获取的用户标识以及存储模块存储的当前认证令牌,生成第二签名摘要;比较单元,用于比较第一签名摘要和第二签名摘要是否相同,如果相同,表明认证通过,进行数据交互;如果不相同,表明认证失败,向第二服务器返回认证失败信息。较佳地,所述第二服务器包括协商模块、存储模块、认证请求模块、认证令牌更新模块以及验证请求模块,其中,协商模块,用于与建立相互信任关系的第一服务器协商,生成初始共同密钥作为认证令牌,输出至存储模块;存储模块,用于存储作为认证令牌的初始共同密钥;认证请求模块,用于在预先设置的时间周期到时,生成随机数,并将随机数作为参数进行令牌请求接口的调用;认证令牌更新模块,用于解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储模块存储的认证令牌;
验证请求模块,用于接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串。较佳地,所述认证请求模块包括计时器、随机数生成单元、认证请求生成单元以及令牌请求接口单元,其中,计时器,用于计时,在预先设置的时间周期到时,向随机数生成单元输出触发信息,并重新进行计时;随机数生成单元,用于接收触发信息,生成随机数,输出至认证请求发送单元;认证请求生成单元,用于将随机数携带在用于请求当前认证令牌的认证请求中,输出至令牌请求接口单元;令牌请求接口单元,用于将接收的认证请求进行发送。 由上述技术方案可见,本发明实施例提供的一种基于服务器获取认证令牌的方法及系统,建立相互信任关系的第一服务器与第二服务器协商,生成初始共同密钥作为认证令牌并存储;在预先设置的时间周期到时,第二服务器生成随机数,并将随机数作为参数进行令牌请求接口的调用;第一服务器接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储的认证令牌;第二服务器解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储的认证令牌。这样,通过动态更新认证令牌,使得认证令牌具有有效期,实现自动配置共同密钥,避免公司人员变动时,无法获取下一时间周期内的动态更新的共同密钥,从而降低公司数据信息泄密的危险性,提高认证的安全性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,以下将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,以下描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员而言,还可以根据这些附图所示实施例得到其它的实施例及其附图。图1为现有基于服务器的认证方法流程示意图。图2为本发明实施例基于服务器获取认证令牌的方法流程示意图。图3为本发明实施例基于服务器获取认证令牌的方法具体流程示意图。图4为本发明的实施例基于服务器获取认证令牌的系统结构示意图。
具体实施例方式以下将结合附图对本发明各实施例的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。现有基于服务器获取认证令牌的方法,需要服务器认证双方共同维护约定的共同密钥,而在公司人员有变动的情况下,需要与认证对方协商、更换预先协商的secretKey,从而造成认证双方频繁的程序或配置更改,共同密钥维护较为繁琐,而如果不及时更换,又会导致认证的安全性较低。本发明实施例中,提出一种基于动态令牌(token)的认证方式,提供服务器间轻量级的认证协议,以降低认证安全性对预先协商的secretKey的依赖性。这样,在公司人员变动时,不会对服务器间的认证安全性产生威胁,从而实现一种较高安全性的认证方式。图2为本发明实施例基于服务器获取认证令牌的方法流程示意图。参见图2,该流程包括步骤201,建立相互信任关系的第一服务器与第二服务器协商,生成初始共同密钥作为认证令牌并存储;本步骤中,第二服务器(Secondary Server)为第一服务器(Primary Server)信任的服务器,Primary Server与Secondary Server建立相互信任关系的流程,具体可参见相关技术文献,在此不再赘述。实际应用中,也可以是Primary Server分配一个初始共同密钥(InitKey)给Secondary Server, Secondary Server 接收 InitKey 并存储。实际应用中,可以采用建立认证令牌与服务器标识的映射关系的方式,存储认证令牌。步骤202,在预先设置的时间周期到时,第二服务器生成随机数,并将随机数作为参数进行令牌请求接口的调用;本步骤中,Secondary Server中设置计时器,在预先设置的时间周期到时,生成随机数(randomKey),调用令牌请求接口(GetToken接口),申请当前时间周期内的认证令牌(Token),并将生成的随机数携带在认证请求中,即在调用GetToken接口时,将randomKey作为参数传给Primary Server。也就是说,预先设置的初始共同密钥具有有效期,在有效期内,可以作为共同密钥进行认证,在有效期过后,则自动失效,需要采用新的共同密钥来代替,即在设置的时间周期到时,需要申请新的当前认证令牌,代替在前使用的认证令牌(如果为初次使用,则为初始共同密钥),从而通过动态的共同密钥的更新,避免公司人员变动时,即使能够获知共同密钥,但由于共同密钥的使用有效期有限,因而,无法获取动态更新的共同密钥,从而提高认证的安全性。预先设置的时间周期可以根据实际需要进行设置,例如,时间周期可以设置为12小时、一天、二天或一周等。举例来说,如果时间周期设置为一天,并以0:00进行计时,则在计时到24:00时,触发调用GetToken接口,请求当天的Token,向第一服务器发送认证请求。RandomKey用于防止重放攻击。本发明实施例中,Secondary Server还可以进一步在认证请求中,携带GetToken接口地址信息。步骤203,第一服务器接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;本步骤中,第一服务器接收认证请求, 为第二服务器分配当前认证令牌。第一服务器根据认证请求中携带的randomKey以及前一时间周期内的认证令牌(PreToken),加密生成的 Token。
本发明实施例中,通过如下加密算法生成加密的令牌字符串(tokenStr)tokenStr=encrypt (Token, randomKey+PreToken)该加密算法中,通过randomKey 以及 PreToken,即 randomKey + PreToken,加密Token,实际应用中,加密算法可以是对称分组密码算法(blowf ish)。其中,加密算法模式为Blowfish/ECB/NoPaddingo步骤204,通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储的认证令牌;本步骤中,根据分配的当前认证令牌更新存储的认证令牌可以是,第一服务器在对当前认证令牌进行加密的同时或之后,存储为第二服务器生成的当前认证令牌,即用分配的当前认证令牌替换存储的认证令牌。当然,实际应用中,根据分配的当前认证令牌更新存储的认证令牌也可以是将初始共同密钥与分配的当前认证令牌分别进行存储,这样,较佳地,在分配当前认证令牌之后,对当前认证令牌进行加密之前,该方法进一步包括查询是否存储有前一时间周期内的认证令牌,如果没有,以存储的初始共同密钥为前一时间周期内的认证令牌。即当第一次使用时,即没有存储前一时间周期内的令牌,将initKey 作为 preToken。 实际应用中,Primary Server可以根据接收的认证请求中携带的GetToken接口地址信息输出加密的令牌字符串。步骤205,第二服务器解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储的认证令牌。本步骤中,SecondaryServer 解密 tokenStr,从而获取到 token。解密算法如下Token=decrypt (tokenStr, randomKey+PreToken)该解密算法为第一服务器进行加密的加密算法对应的解密算法,通过存储的randomKey 以及 PreToken,即 randomKey + PreToken,解密 tokenStr,得到 Token。本步骤中,根据获取的当前认证令牌更新存储的认证令牌可以是,第二服务器获取当前认证令牌之后,用获取的当前认证令牌替换存储的认证令牌。当然,实际应用中,根据获取的当前认证令牌更新存储的认证令牌也可以是将初始共同密钥与分配的当前认证令牌分别进行存储,这样,较佳地,在第二服务器解密接收的加密的令牌字符串之后,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌之前,该方法进一步包括查询第二服务器是否存储有前一时间周期内的认证令牌,如果没有,以存储的初始共同密钥为前一时间周期内的认证令牌。较佳地,该方法还进一步包括步骤206,第二服务器接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串;本步骤中,Primary Server为接收HTTP请求的服务器,Secondary Server为生成并发起HTTP请求的服务器。
Secondary Server接收到通过Oauth的认证方式认证的用户请求后,在超文本传输协议(HTTP,Hypertext Transfer Protocol)请求的请求头(Header)中加入通过当前认证令牌和用户标识(uid)生成的认证属性字符串” authorization” :authorizationValue。其中,认证属性字符串(authorizationValue)根据签名摘要(signStr)以及认证字符串(authStr)生成,其中,通过当前认证令牌以及用户标识,生成第一签名摘要,生成算法为signStrI = MD5_hash (uidl+Tokenl)算法中,Uidl为认证的用户标识(ID),采用消息摘要算法第五版(MD5,Message DigestAlgorithm)哈希算法(MD5_hash),对用户标识以及当前认证令牌进行运算,得到第一签名摘要(signStrl),即用uid和Token的组合串进行MD5生成的签名摘要。通过第一签名摘要以及用户标识,生成第一认证字符串,第一认证字符串格式为authStrl=uidl+” ”+signStrl。通过对第一认证字符串进行编码,携带当前认证令牌标识,生成认证属性字符串,认证属性字符串格式为String authorizationValue=〃Token〃+new String (Base64.encodeBase64(authStr. getByte ("utf-8"))," utf-8")。
`
本发明实施例中,Token表示采用Token认证方式,采用8比特的Unicode的可变长度字符编码(UTF-8,8_bit Unicode Transformation Format)对 authStr 进行编码,即authorizationValue 米用 base64 编码串。具体来说,Secondary Server向Primary Server进行接口调用时,除了附带相关接口调用所需的业务参数外,在HTTP的header信息头中加入authorization属性,作为认证信息。步骤207,第一服务器接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。本步骤中,由于只有Secondary Server和Primary Server获知双方当前用于通信的当前认证令牌Token,所以在Secondary Server生成signStr后,只有Primary Server可以进行相关有效性校验,从而实现安全认证通信的目的。具体来说,Primary Server接收HTTP请求,获取HTTP请求中携带的认证属性字符串,即 String authorizationValue=//Token//+new String (Base64. encodeBase64(authStr. getByte (〃utf_8〃)), 〃utf_8〃),根据认证属性字符串中的Token标识,确定采用Token认证方式,对认证属性字符串中的new String (Base64. encodeBase64 (authStr.getByte (〃utf_8〃)),〃utf_8〃)进行解码,获取authStrl,根据authStrl的格式,分别获取用户标识I以及signStrl,根据获取的用户标识I (uidl)以及预先存储的当前认证令牌(Token2),生成第二签名摘要,生成算法为signStr2 = MD5_hash (uidl+Token2)比较第一签名摘要和第二签名摘要是否相同,如果相同,表明认证通过,进行数据交互;如果不相同,表明认证失败,向第二服务器返回认证失败信息。图3为本发明实施例基于服务器获取认证令牌的方法具体流程示意图。以Secondary Server每天进行一次token获取,即预先设置的时间周期为一天为例,参见图3,该流程包括步骤301,在当天零点,Secondary Server 携带参数 randomKey,调用 GetToken 接P ,向 Primary Server 请求 Token ;本步骤中,Secondary Server在预先设置的时间周期到时,生成一随机数randomKey,以向 Primary Server 请求 Token。步骤302, Primary Server 生成 token,并用 randomKey 和 PreToken/InitKey 加密 token,生成 tokenStr,返回至 Secondary Server ;本步骤中,tokenStr=encrypt(Token, randomKey+PreToken)。步骤303, Primary Server得到当天的token后,进行存储;步骤304, Secondary Server解密获取token并存储后,生成认证字符串authorizationValue,置于HTTP请求头中,进行接口调用;步骤305, Primary Server 验证 authorizationValue,成功后进行接口功能操作并返回相关结果;步骤3 06, Secondary Server 在全天内,可携带 authorizationValue,进行相关接口调用;步骤307, Primary Server通过验证authorizationValue,确认合法性,进行相应功能操作并返回结果;步骤308,计时到下一天零点,返回执行步骤301。由上述可见,本发明实施例的基于服务器获取认证令牌的方法,通过动态更新认证令牌,使得认证令牌具有有效期,在有效期内,可以作为共同密钥进行认证,在有效期过后,则自动失效,需要申请新的当前认证令牌,从而通过动态的认证令牌的更新,实现自动配置共同密钥,避免公司人员变动时,即使能够获知共同密钥,但由于共同密钥的使用有效期有限,因而,无法获取下一时间周期内的动态更新的共同密钥,从而降低公司数据信息泄密的危险性,提高认证的安全性。同时,让服务器间的请求认证安全性不依赖某一具体信息,通过动态的token,既保证认证的轻量级,同时保证认证的安全性。图4为本发明的实施例基于服务器获取认证令牌的系统结构示意图。参见图4,该系统包括第一服务器以及第二服务器,其中,第一服务器,用于与建立相互信任关系的第二服务器协商,生成初始共同密钥作为认证令牌并存储;接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储的认证令牌;第二服务器,用于与建立相互信任关系的第一服务器协商,生成初始共同密钥作为认证令牌并存储;在预先设置的时间周期到时,调用预先设置的令牌请求接口,生成随机数,并将随机数作为参数进行令牌请求接口的调用;解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储的认证令牌。较佳地,第二服务器进一步用于接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串;相应地,第一服务器进一步用于接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。其中,第一服务器包括协商模块、存储模块、认证请求处理模块以及验证模块(图中未示出),其中,协商模块,用于与建立相互信任关系的第二服务器协商,生成初始共同密钥作为认证令牌,输出至存·储模块;存储模块,用于存储作为认证令牌的初始共同密钥;本发明实施例中,存储模块采用建立认证令牌与服务器标识的映射关系的方式,存储认证令牌。认证请求处理模块,用于接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储模块存储的认证令牌;本发明实施例中,根据分配的当前认证令牌更新存储的认证令牌可以是,第一服务器在对当前认证令牌进行加密的同时或之后,存储为第二服务器生成的当前认证令牌,即用分配的当前认证令牌替换存储的认证令牌。当然,实际应用中,根据分配的当前认证令牌更新存储的认证令牌也可以是将初始共同密钥与分配的当前认证令牌分别进行存储。这样,在分配当前认证令牌之后,对当前认证令牌进行加密之前,认证请求处理模块查询是否存储有前一时间周期内的认证令牌,如果没有,以存储的初始共同密钥为前一时间周期内的认证令牌。验证模块,用于接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。本发明实施例中,验证模块包括认证属性字符串获取单元、解码单元、第一签名摘要获取单元、第二签名摘要获取单元以及比较单元,其中,认证属性字符串获取单元,用于接收HTTP请求,获取HTTP请求中携带的认证属性字符串;解码单元,用于根据认证属性字符串中的令牌标识,确定采用令牌认证方式,对认证属性字符串进行解码,获取第一认证字符串,输出至第一签名摘要获取单元;第一签名摘要获取单元,用于根据认证字符串的格式,从接收的第一认证字符串中,分别获取用户标识以及第一签名摘要;第二签名摘要获取单元,用于根据第一签名摘要获取单元获取的用户标识以及存储模块存储的当前认证令牌,生成第二签名摘要;比较单元,用于比较第一签名摘要和第二签名摘要是否相同,如果相同,表明认证通过,进行数据交互;如果不相同,表明认证失败,向第二服务器返回认证失败信息。第二服务器包括协商模块、存储模块、认证请求模块、认证令牌更新模块以及验证请求模块(图中未示出),其中,协商模块,用于与建立相互信任关系的第一服务器协商,生成初始共同密钥作为认证令牌,输出至存储模块;存储模块,用于存储作为认证令牌的初始共同密钥;认证请求模块,用于在预先设置的时间周期到时,调用预先设置的令牌请求接口,生成随机数,并将随机数作为参数进行令牌请求接口的调用;本发明实施例中,认证请求模块包括计时器、随机数生成单元、认证请求生成单元以及令牌请求接口单元,其中,计时器,用于计时,在预先设置的时间周期到时,向随机数生成单元输出触发信息,并重新进行计时;随机数生成单元,用于接收触发信息,生成随机数,输出至认证请求发送单元;认证请求生成单元,用于将随机数携带在用于请求当前认证令牌的认证请求中,输出至令牌请求接口单元;令牌请求接口单元,用于将接收的认证请求进行发送。

认证令牌更新模块,用于解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储模块存储的认证令牌; 本发明实施例中,根据获取的当前认证令牌更新存储的认证令牌可以是,第二服务器获取当前认证令牌之后,用获取的当前认证令牌替换存储的认证令牌。当然,实际应用中,根据获取的当前认证令牌更新存储的认证令牌也可以是将初始共同密钥与分配的当前认证令牌分别进行存储。这样,在第二服务器解密接收的加密的令牌字符串之后,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌之前,认证令牌更新模块查询第二服务器是否存储有前一时间周期内的认证令牌,如果没有,以存储的初始共同密钥为前一时间周期内的认证令牌。验证请求模块,用于接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串。本发明实施例中,认证属性字符串(authorizationValue)根据签名摘要(signStr)以及认证字符串(authStr)生成,其中,通过当前认证令牌以及用户标识,生成第一签名摘要,生成算法为signStrl = MD5_hash (uidl+Tokenl)算法中,Uidl为认证的用户标识(ID),用uid和Token的组合串进行MD5生成第一签名摘要。通过第一签名摘要以及用户标识,生成第一认证字符串,第一认证字符串格式为authStrl=uidl+” ”+signStrl。通过对第一认证字符串进行编码,携带当前认证令牌标识,生成认证属性字符串,认证属性字符串格式为String authorizationValue=〃Token〃+new String (Base64.encodeBase64(authStr. getByte ("utf-8"))," utf-8")。显然,本领域技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也包含 这些改动和变型在内。
权利要求
1.一种基于服务器获取认证令牌的方法,包括建立相互信任关系的第一服务器与第二服务器协商,生成初始共同密钥作为认证令牌并存储;在预先设置的时间周期到时,第二服务器生成随机数,并将随机数作为参数进行令牌请求接口的调用;第一服务器接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储的认证令牌;第二服务器解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储的认证令牌。
2.根据权利要求1所述的方法,其中,所述方法进一步包括第二服务器接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串;第一服务器接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。
3.根据权利要求1或2所述的方法,其中,采用建立认证令牌与服务器标识的映射关系的方式,存储所述认证令牌。
4.根据权利要求3所述的方法,其中,所述根据分配的当前认证令牌更新存储的认证令牌包括第一服务器在对当前认证令牌进行加密的同时或之后,用分配的当前认证令牌替换存储的认证令牌。
5.根据权利要求3所述的方法,其中,所述根据分配的当前认证令牌更新存储的认证令牌包括将初始共同密钥与分配的当前认证令牌分别进行存储。
6.根据权利要求5所述的方法,其中,在所述分配当前认证令牌之后,对当前认证令牌进行加密之前,该方法进一步包括查询是否存储有前一时间周期内的认证令牌,如果没有,以存储的初始共同密钥为前一时间周期内的认证令牌。
7.根据权利要求3所述的方法,其中,通过当前认证令牌和用户标识生成所述认证属性字符串包括通过当前认证令牌以及用户标识,生成第一签名摘要;通过第一签名摘要以及用户标识,生成第一认证字符串;通过对第一认证字符串进行编码,携带当前认证令牌标识,生成认证属性字符串。
8.根据权利要求7所述的方法,其中,所述通过当前认证令牌以及用户标识,生成第一签名摘要包括采用消息摘要算法第五版哈希算法,对用户标识以及当前认证令牌进行运算,得到第一签名摘要。
9.根据权利要求8所述的方法,其中,所述认证属性字符串格式为String authorizationValue=//Token//+new String(Base64. encodeBase64(authStr. getByte ("utf_8")),"utf_8");其中,Token表示采用Token认证方式;new String (Base64. encodeBase64 (authStr. getByte (〃utf_8〃)),〃utf_8〃)表不采用8比特的Unicode的可变长度字符编码对authStr进行编码。
10.根据权利要求9所述的方法,其中,所述进行认证属性字符串验证包括第一服务器获取HTTP请求中携带的认证属性字符串,根据认证属性字符串中的Token,确定米用Token认证方式,对认证属性字符串中的newString (Base64. encodeBase64 (authStr. getByte (〃utf_8〃)), 〃utf_8〃)进行解码,获取 authStr,根据 authStr的格式,分别获取用户标识以及signStr,根据获取的用户标识以及预先存储的当前认证令牌,生成第二签名摘要;比较第一签名摘要和第二签名摘要是否相同,如果相同,表明认证通过;如果不相同, 表明认证失败。
11.一种基于服务器获取认证令牌的系统,其特征在于,该系统包括第一服务器以及第二服务器,其中,第一服务器,用于与建立相互信任关系的第二服务器协商,生成初始共同密钥作为认证令牌并存储;接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储的认证令牌;第二服务器,用于与建立相互信任关系的第一服务器协商,生成初始共同密钥作为认证令牌并存储;在预先设置的时间周期到时,生成随机数,并将随机数作为参数进行令牌请求接口的调用;解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储的认证令牌。
12.根据权利要求11所述的系统,其特征在于,所述第二服务器进一步用于接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串;相应地,第一服务器进一步用于接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。
13.根据权利要求12所述的系统,其特征在于,所述第一服务器包括协商模块、存储模块、认证请求处理模块以及验证模块,其中,协商模块,用于与建立相互信任关系的第二服务器协商,生成初始共同密钥作为认证令牌,输出至存储模块;存储模块,用于存储作为认证令牌的初始共同密钥;认证请求处理模块,用于接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及预先设置的加密算法,对当前认证令牌进行加密,生成加密的令牌字符串;通过令牌请求接口,将加密的令牌字符串输出至第二服务器,根据分配的当前认证令牌更新存储模块存储的认证令牌;验证模块,用于接收HTTP请求,进行认证属性字符串验证,并在通过验证后进行数据交互。
14.根据权利要求12所述的系统,其特征在于,所述验证模块包括认证属性字符串获取单元、解码单元、第一签名摘要获取单元、第二签名摘要获取单元以及比较单元,其中,认证属性字符串获取单元,用于接收HTTP请求,获取HTTP请求中携带的认证属性字符串;解码单元,用于根据认证属性字符串中的令牌标识,确定采用令牌认证方式,对认证属性字符串进行解码,获取第一认证字符串,输出至第一签名摘要获取单元;第一签名摘要获取单元,用于根据认证字符串的格式,从接收的第一认证字符串中,分别获取用户标识以及第一签名摘要;第二签名摘要获取单元,用于根据第一签名摘要获取单元获取的用户标识以及存储模块存储的当前认证令牌,生成第二签名摘要;比较单元,用于比较第一签名摘要和第二签名摘要是否相同,如果相同,表明认证通过,进行数据交互;如果不相同,表明认证失败,向第二服务器返回认证失败信息。
15.根据权利要求12所述的系统,其特征在于,所述第二服务器包括协商模块、存储模块、认证请求模块、认证令牌更新模块以及验证请求模块,其中,协商模块,用于与建立相互信任关系的第一服务器协商,生成初始共同密钥作为认证令牌,输出至存储模块;存储模块,用于存储作为认证令牌的初始共同密钥;认证请求模块,用于在预先设置的时间周期到时,生成随机数,并将随机数作为参数进行令牌请求接口的调用;认证令牌更新模块,用于解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,根据获取的当前认证令牌更新存储模块存储的认证令牌;验证请求模块,用于接收用户请求,生成HTTP请求,并在HTTP请求的请求头中携带通过当前认证令牌和用户标识生成的认证属性字符串。
16.根据权利要求15所述的系统,其特征在于,所述认证请求模块包括计时器、随机数生成单元、认证请求生成单元以及令牌请求接口单元,其中,计时器,用于计时,在预先设置的时间周期到时,向随机数生成单元输出触发信息,并重新进行计时;随机数生成单元,用于接收触发信息,生成随机数,输出至认证请求发送单元;认证请求生成单元,用于将随机数携带在用于请求当前认证令牌的认证请求中,输出至令牌请求接口单元;令牌请求接口单元,用于将接收的认证请求进行发送。
全文摘要
本发明公开了一种基于服务器获取认证令牌的方法及系统。该方法包括第一服务器与第二服务器协商生成初始共同密钥作为认证令牌并存储;在预先设置的时间周期到时,第二服务器生成随机数,并将随机数作为参数进行令牌请求接口的调用;第一服务器接收认证请求,分配当前认证令牌,根据接收的随机数、预先存储的认证令牌以及加密算法,对当前认证令牌进行加密;将加密的令牌字符串输出至第二服务器,根据当前认证令牌更新存储的认证令牌;第二服务器解密接收的加密的令牌字符串,根据存储的随机数、认证令牌以及预先设置的解密算法,获取当前认证令牌,并更新存储的认证令牌。应用本发明,可以实现自动配置共同密钥,提高认证的安全性。
文档编号H04L9/32GK103051628SQ201210564169
公开日2013年4月17日 申请日期2012年12月21日 优先权日2012年12月21日
发明者李庆丰 申请人:微梦创科网络科技(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1