一种身份认证方法、系统及装置与流程

文档序号:33172015发布日期:2023-02-04 02:45阅读:22来源:国知局
一种身份认证方法、系统及装置与流程

1.本公开涉及计算机技术领域,进一步涉及云计算技术领域,尤其涉及一种身份认证方法、系统及装置。


背景技术:

2.用户在请求业务服务器的服务时需要进行签名认证,签名认证通过后才能获取相关服务。对于云服务来说,云上租户数量的快速增长,租户购买的云上资源也越来越多,导致了云请求流量的快速增长,单点问题、性能问题、热点客户问题日益突出。针对上述问题,可以通过横向扩容认证服务器的方式解决;但这种方式无法处理请求方和认证服务器因为网络问题带来的不可用影响;其次,认证服务器的横向扩容也会增加成本。


技术实现要素:

3.本公开提供了一种用于身份认证的方法、系统及装置。
4.根据本公开的一方面,提供了一种身份认证方法,应用于业务端的认证代理服务器,所述业务端还包括业务服务器,所述方法包括:
5.获取所述业务服务器对应的身份认证请求;所述身份认证请求中包含认证字符串;
6.根据所述认证字符串,判断是否需要从认证服务器中拉取所述身份认证请求的派生密钥;
7.若是,则从所述认证服务器中拉取所述身份认证请求的派生密钥,并根据所述派生密钥对所述身份认证请求进行鉴权认证;
8.若否,则通过本地缓存对所述身份认证请求进行鉴权认证。
9.根据本公开的另一方面,提供了一种身份认证系统,包括:业务端的认证代理服务器,业务端的业务服务器和认证端的认证服务器;
10.所述认证代理服务器,用于获取所述业务服务器对应的身份认证请求;所述身份认证请求中包含认证字符串;根据所述认证字符串,判断是否需要从所述认证服务器中拉取所述身份认证请求的派生密钥;若是,则从所述认证服务器中拉取所述身份认证请求的派生密钥,并根据所述派生密钥对所述身份认证请求进行鉴权认证;若否,则通过本地缓存对所述身份认证请求进行鉴权认证;
11.所述业务服务器,用于在所述身份认证请求鉴权认证通过的情况下,响应所述身份认证请求对应的访问请求;
12.所述认证端的认证服务器,用于生成所述身份认证请求的派生密钥。
13.根据本公开的另一方面,提供了一种身份认证装置,所述装置包括:
14.预处理模块,用于获取所述业务服务器对应的身份认证请求;所述身份认证请求中包含认证字符串;
15.判断模块,用于根据所述认证字符串,判断是否需要从认证服务器中拉取所述身
份认证请求的派生密钥;
16.拉取模块,用于若需要从认证服务器中拉取所述身份认证请求的派生密钥,则从所述认证服务器中拉取所述身份认证请求的派生密钥,并根据所述派生密钥对所述身份认证请求进行鉴权认证;
17.本地处理模块,用于若不需要从认证服务器中拉取所述身份认证请求的派生密钥,则通过本地缓存对所述身份认证请求进行鉴权认证。
18.根据本公开的另一方面,提供了一种电子设备,包括:
19.至少一个处理器;以及
20.与所述至少一个处理器通信连接的存储器;其中,
21.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述任一身份认证方法。
22.根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行上述任一身份认证方法。
23.根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述任一身份认证方法。
24.本公开提供的身份认证方法,应用于业务端的认证代理服务器,业务端还包括业务服务器,该方法包括:获取业务服务器对应的身份认证请求;身份认证请求中包含认证字符串;根据认证字符串,判断是否需要从认证服务器中拉取身份认证请求的派生密钥;若是,则从认证服务器中拉取身份认证请求的派生密钥,并根据派生密钥对身份认证请求进行鉴权认证;若否,则通过本地缓存对身份认证请求进行鉴权认证。此举能够降低认证服务器的计算压力。
25.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
26.附图用于更好地理解本方案,不构成对本公开的限定。其中:
27.图1是根据本公开的身份认证方法的第一种流程示意图;
28.图2是根据本公开的身份认证方法的第二种流程示意图;
29.图3是根据本公开的身份认证方法的第三种流程示意图;
30.图4a是相关技术中一种完成认证鉴权的系统部署架构示意图;
31.图4b是本公开的一种完成认证鉴权的系统部署架构示意图;
32.图5是根据本公开的认证代理服务器的整体架构示意图;
33.图6是根据本公开的身份认证方法的第四种流程示意图;
34.图7是根据本公开的准备拦截器的处理流程示意图;
35.图8是根据本公开的统计拦截器的处理流程示意图;
36.图9是根据本公开的标识符和标识上下文的类图;
37.图10是根据本公开的鉴权拦截器的处理流程示意图;
38.图11是根据本公开的身份认证系统的一种交互示意图;
39.图12是根据本公开的身份认证装置的第一种结构示意图;
40.图13是根据本公开的身份认证装置的第二种结构示意图;
41.图14是根据本公开的身份认证装置的第三种结构示意图;
42.图15是用来实现本公开实施例的身份认证方法的电子设备的框图。
具体实施方式
43.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
44.用户在请求业务服务器的服务时需要进行签名认证,签名认证通过后才能获取相关服务。对于云服务来说,云服务的api(application programming interface,应用程序接口)认证统一使用签名校验机制,当前的签名算法为云服务带来了安全可靠的身份校验机制,拦截了大量的非法请求和恶意攻击。但随着云上租户数量的快速增长,租户购买的云上资源也越来越多,导致了云请求流量的快速增长,单点问题、性能问题、热点客户问题日益突出。首先是单点问题,所有服务在收到用户请求后,都必须向认证服务器提交认证字符串进行验算;一旦认证服务器被攻击或者出现性能瓶颈,无法及时响应签名验证请求,云上的所有服务将受影响;其次是性能问题,认证服务器管理了客户的accesskey密钥信息,不适宜和业务大面积混部;而若认证服务器的服务实例仅部署于有限比例的机器,无论其性能如何优化,也终将满足不了云平台几十万台机器上业务实例的qps(queries-per-second,每秒查询速率)需求;最后是热点客户问题,各个云产品都有自己的热点客户以及vip客户,这些客户的认证、鉴权和普通用户是同时处理的,可能出现优先级反转的情况。
45.针对上述问题,相关技术中是通过横向扩容认证服务器的方式解决;但这种方式无法处理请求方和认证服务器因为网络问题带来的不可用影响;其次,认证服务器的横向扩容也会增加成本。
46.为了解决单点问题、性能问题、热点客户问题中的至少一项,本公开实施例提供了一种身份认证方法,应用于业务端的认证代理服务器,所述业务端还包括业务服务器,业务端为提供云服务业务的系统端,例如,针对提供计算资源的云服务,业务端即为计算服务器所在的系统端,例如,针对提供存储资源的云服务,业务端即为存储服务器所在的系统端。
47.一个例子中,认证代理服务器运行sidecar(边车)模式的iam前置机服务,其中,边车模式是指对现有的业务增加额外的功能,且这些额外功能并不影响现有的业务逻辑的一种模式,iam(identity access management)为身份识别及访问管理,iam前置机服务是指将iam功能通过前置机服务实现,即在业务端的认证代理服务器中添加前置机服务,用于实现iam功能;一个例子中,iam功能通过前置机服务可以为运行在认证代理服务器中的进程,本技术实施例中的身份认证方法可以通过iam前置机服务实现。
48.参见图1,本技术实施例的身份认证方法包括:
49.s101、获取所述业务服务器对应的身份认证请求;所述身份认证请求中包含认证字符串;
50.用户在请求业务服务器的服务时,需要进行签名认证,签名认证通过后才能获取相关服务。具体的,用户向业务服务器发送http请求时,需要先经过认证代理服务器对该
http请求进行签名认证,而认证代理服务器在对该http请求进行签名认证之前,还会为接收到的http请求设置id,以便对请求进行梳理,然后对http请求进行数据结构化处理,将http请求格式转化为认证代理服务器内部使用的数据格式,得到身份认证请求。
51.认证代理服务器对该http请求进行签名认证的过程即是复现生成认证字符串的过程,通过比较生成的认证字符串与身份认证请求中携带的认证字符串是否一致即可确定签名认证结果。
52.s102、根据所述认证字符串,判断是否需要从认证服务器中拉取所述身份认证请求的派生密钥;
53.认证字符串中包含前缀字符串(authstringprefix)、签名头域(signedheaders)和签名摘要(signature)这三部分内容,其中,前缀字符串又由{访问密钥id(accesskeyid)}/{时间戳(timestamp)}/{有效期(expirationperiodinseconds)}这三部分构成。
54.认证代理服务器可以根据认证字符串,判断是否需要从认证服务器中拉取身份认证请求的派生密钥。认证服务器即为进行身份认证的iam中心集群。一个例子中,认证服务器处于认证端,即区别于业务端的系统端。
55.一个例子中,在根据所述认证字符串,判断是否需要从认证服务器中拉取所述身份认证请求的派生密钥之前,还包括:
56.判断本地缓存中是否已经缓存有所述身份认证请求,若存在则从所述本地缓存中获取身份认证请求的鉴权结果;若不存在,则触发执行s102。在本地缓存中包括身份认证请求的情况下,可以直接从缓存中获取身份认证请求的鉴权结果,此时,不用为身份认证请求生成待认证字符串,节约了认证代理服务器的计算资源。
57.s103、若是,则从所述认证服务器中拉取所述身份认证请求的派生密钥,并根据所述派生密钥对所述身份认证请求进行鉴权认证;
58.若需要从认证服务器中拉取身份认证请求的派生密钥,则从认证服务器中拉取身份认证请求的派生密钥,根据派生密钥生成身份认证请求的待认证字符串,通过将待认证字符串和身份认证请求中携带的认证字符串进行比对,完成对身份认证请求的鉴权认证。
59.s104、若否,则通过本地缓存对所述身份认证请求进行鉴权认证。
60.若不需要从认证服务器中拉取身份认证请求的派生密钥,则根据本地缓存对身份认证请求进行鉴权认证。
61.本公开实施例提供的身份认证方法,通过业务端的认证代理服务器获取业务服务器对应的身份认证请求;身份认证请求中包含认证字符串;根据认证字符串,判断是否需要从认证服务器中拉取身份认证请求的派生密钥;若是,则从认证服务器中拉取身份认证请求的派生密钥,并根据派生密钥对身份认证请求进行鉴权认证;若否,则通过本地缓存对身份认证请求进行鉴权认证。可见,本公开实施例通过认证代理服务器拦截流量,在本地实现签名认证,能够有效避免iam的中心化集群出现故障问题,同时降低了iam中心化集群的压力。
62.一个例子中,上述步骤s102可细化为以下步骤,参见图2,所述方法包括:
63.s201、当所述认证字符串表示所述身份认证请求属于预设版本时,更新所述预设版本对应的身份认证请求计数;
64.用户在向不同业务服务器请求服务时,生成的认证字符串可以是不同版本的,例如,用户在请求智能云服务时,其生成的认证字符串的类型就可以是智能云v1版本。认证代理服务器只有在确定认证字符串为智能云v1版本后,才会统计身份认证请求的计数。
65.s202、判断所述预设版本对应的身份认证请求计数是否大于预设阈值;
66.预设阈值可以为一根据经验设定的值,如1000,3000,当对当前预设版本的统计数大于预设阈值,说明认证代理服务器已经接收到很多请求了。
67.s203、若大于,则基于本地缓存中是否缓存有所述认证字符串中的访问密钥身份标识id,来判断是否需要为所述身份认证请求从认证服务器拉取派生密钥。
68.当预设版本的身份认证请求的数量大于预设阈值,还需进一步判断是否需要为身份认证请求从认证服务器拉取派生密钥,这里有两个原因:
69.第一,如果用户在发送身份认证请求后,在未收到认证结果的情况下,又发送了一次身份认证请求,那么就会产生两个除了时间戳不一样之外的相同身份认证请求,对于这两个身份认证请求,会拉取到相同的派生密钥;第二,频繁地生成派生密钥会降低认证服务器的性能。结合这两点原因,在判断出预设版本的身份认证请求的数量大于预设阈值时,还需要基于是否缓存有认证字符串中的访问密钥id,来判断是否需要为身份认证请求从认证服务器拉取派生密钥。
70.我们希望,认证代理服务器在拉取派生密钥的过程中能够进行并发控制,保证只有需要才向认证服务器拉取派生密钥。考虑对并发粒度的控制,最佳的粒度是除了时间戳不同以外,认证字符串不相同时均允许并发,然而认证字符串中其实除了访问密钥id之外,其余唯一可能变化的就是认证字符串有效期,而它的变化频率并不高,因此可以把粒度控制在访问密钥id,即有已相同的访问密钥id在拉取时,就不对身份认证请求进行拉取。
71.可见,本公开实施例在拉取派生密钥的过程中进行并发控制,能够提高认证服务器的工作效率。
72.一个例子中,还可以在认证字符串表示身份认证请求属于预设版本时,根据特权客户名单筛选属于特权客户的身份认证请求,进一步基于是否缓存有认证字符串中的访问密钥id,来判断是否需要为身份认证请求从认证服务器拉取派生密钥。其中,特权客户名单可以是认证服务器发送给认证代理服务器,保存在认证代理服务器本地的,认证代理服务器可以优先处理特权客户的身份认证请求。
73.可见,本公开实施例通过筛选属于特权客户的身份认证请求,对特权客户的身份认证请求优先处理,能够保证特权客户的权益。
74.派生密钥可能存在拉取失败的情况,一个例子中,参见图3,所述方法还包括:
75.s301、确定从所述认证服务器拉取派生密钥的开始时间;
76.派生密钥是和时间有关的参数,一个例子中,认证服务器生成的派生密钥是秒级的,也就是说,在12:00:00和12:00:01生成的派生密钥是不同,用户很有可能是使用当前时间进行签名,为了对用户进行身份认证,认证代理服务器需要从服务器拉取几秒内的派生密钥。
77.当从认证服务器中拉取身份认证请求的派生密钥时,记录此时的时间。
78.s302、当距离所述开始时间的时长达到预设时长、且未获取到所述派生密钥的情况下,重新从所述认证服务器中拉取所述身份认证请求的派生密钥;
79.因为此前已获取有开始拉取派生密钥的时间,当距离开始时间大于一预设时长的情况下,说明可能拉取失败,此时会选择重新拉取。预设时长可以一为经验设定的值,如1s,2s。
80.s303、在距离重新开始拉取时刻的时长大于预设时长、且未获取到所述派生密钥的情况下,生成与访问密钥id对应的拉取失败记录;
81.若重新拉取派生密钥后,仍然在预设时长内未获取到相应派生密钥,说明重新拉取派生密钥也失败了,为了不阻碍相同访问密钥id的后续请求,可以为当前访问密钥id生成对应的拉取失败记录。
82.拉取结果记录可用于进行拉取派生密钥的并发控制。
83.一个例子中,当所述访问密钥id不同于缓存中的任一访问密钥id,或者,所述访问密钥id对应有拉取失败记录的情况下,判定需要为所述身份认证请求向认证服务器拉取派生密钥。
84.我们希望,认证代理服务器在拉取派生密钥的过程中能够进行并发控制,保证只有需要才向认证服务器拉取派生密钥。考虑对并发粒度的控制,最佳的粒度是除了时间戳不同以外,认证字符串不相同时均允许并发,然而认证字符串中其实除了访问密钥id之外,其余唯一可能变化的就是认证字符串有效期,而它的变化频率并不高,因此可以把粒度控制在访问密钥id,即有已相同的访问密钥id在拉取时,就不对身份认证请求进行拉取。
85.同时也考虑到,在为身份认证请求拉取派生密钥时,会出现拉取失败的情况。若针对身份认证请求1,未能成功为其拉取派生密钥,则会为访问密钥1生成拉取失败记录,当携带访问密钥1的身份认证请求再次请求拉取派生密钥时,虽然已经为访问密钥1拉取过派生密钥,但访问密钥1对应有拉取失败记录,此时,仍然需要为携带访问密钥1的身份认证请求拉取派生密钥。
86.可见,本公开实施例通过是否缓存有访问密钥id和是否存在该访问密钥id对应的拉取失败记录这两个条件,综合判断是否为身份认证请求拉取派生密钥,避免了阻碍相同访问密钥的后续请求。
87.s304、在重新拉取到派生密钥的情况下,将重新拉取的派生密钥缓存到本地缓存中。
88.若重新拉取派生密钥后,获取到了相应派生密钥,则可以为当前访问密钥id生成拉取成功记录,并将重新拉取成功的派生密钥缓存到本地缓存中。
89.将派生密钥缓存到本地缓存能够避免私密访问密钥的泄露,私密访问密钥和访问密钥id共同用于签名认证;但若认证代理服务器被攻击,导致派生密钥被获取,用派生密钥生成的签名仍然会在一段时间内有效,不过通常是在缓存的时间内有效,缓存一般只有15秒,总的影响不大。
90.可见,本公开实施例中,通过设置拉取失败记录/拉取成功记录,能够对进行拉取派生密钥这一过程进行并发控制,避免阻碍相同访问密钥id的后续请求。
91.一个例子中,上述步骤s104可包括以下步骤:
92.根据所述本地缓存中的派生密钥对所述身份认证请求进行鉴权认证;
93.认证代理服务器在从服务器拉取派生密钥后,会将拉取到的派生密钥缓存到本地缓存。当接收到身份认证请求,先判断本地缓存中是否缓存有用于验证身份认证请求的派
生密钥,若存在,则根据派生密钥对身份认证请求进行签名,生成待认证字符串,通过比较待认证字符串与身份认证请求中携带的认证字符串是否一致,确定签名认证的结果。
94.或,判断所述本地缓存中是否已经缓存有所述身份认证请求,若存在则从所述本地缓存中获取身份认证请求的鉴权结果。
95.认证代理服务器的本地缓存中还可以缓存已进行身份认证的身份认证请求认证结果,通过将接收到的身份认证请求与存在结果的身份认证请求比对,即可完成身份认证请求的鉴权认证。
96.可见,本公开实施例提供的身份认证方法,通过预拉取派生密钥和缓存认证结果,完成了对身份认证请求的鉴权认证,大大降低了iam中心集群的压力。
97.一个例子中,若本地缓存中既不存在用于对身份认证请求签名的派生密钥,也不存在身份认证请求的认证结果,此时会将该身份认证请求发送到认证服务器进行签名认证,认证代理服务器还会接收认证服务器针对该身份认证请求的认证结果,存储到本地缓存。
98.若认证服务器返回2xx,说明该身份认证请求通过认证,则相应在认证代理服务器中设置成功缓存;若认证服务器返回4xx,说明该身份认证请求未通过认证,则相应在认证代理服务器中设置失败缓存。
99.一个例子中,认证代理服务器作为sidecar部署在业务线的机器上,业务线发送认证鉴权请求时,其可拦截请求并完成本地认证鉴权,示意图如图4a和图4b所示:
100.相关技术中采用如图4a所示的方式进行身份认证请求的鉴权,对象存储服务、云服务器服务的身份认证请求都需要由认证服务器进行签名认证,这种情况下的认证服务器每秒查询率很高。客户进行请求访问时,会感受到明显的网络交互延迟。
101.本技术实施例中采用如图4b所示的方式进行身份认证请求的鉴权,业务端的鉴权从访问认证服务器变成了访问本地的认证代理服务器,对象存储服务器、云服务器对应的身份认证请求变成了通过本地的认证代理服务器进行签名认证,由于派生密钥是和时间有关的参数,一个例子中,认证服务器生成的派生密钥是秒级的,也就是说,在12:00:00和12:00:01生成的派生密钥是不同,用户很有可能是使用当前时间进行签名,为了对用户进行身份认证,当存在需要时,认证代理服务器需要从服务器拉取几秒内的派生密钥。认证代理服务器通过预拉取派生密钥和缓存认证结果完成本地请求。
102.虽然缓存派生密钥能避免sk(secret access key,秘密访问密钥)的泄漏,但是如果服务被攻破导致派生密钥被获取,用它生成签名仍然会导致在一段时间内有效,但是只是控制在缓存的时间内,通常缓存的时候只有15秒,总的影响不大。
103.一个例子中,认证代理服务器的整体架构图如图5所示,包括准备拦截器、统计拦截器、鉴权拦截器以及缓存拦截器。
104.准备拦截器用于接收http请求,并将接收到的http请求转化为内部使用的数据结构,同时从缓存模块获取缓存,构建鉴权上下文,这里构建的鉴权上下文是指身份认证请求。
105.统计拦截器用于标记热点客户,决定是否为热点客户提前拉取派生密钥。
106.鉴权拦截器用于对可以本地处理的身份认证请求进行本地认证鉴权;对不可以本地处理的身份认证请求,判断其是否需要拉取派生密钥,若需要,则标记身份认证请求需要
拉取派生密钥。鉴权拦截器能够对身份认证请求进行调度。
107.缓存拦截器用于接收认证服务器的响应结果并进行缓存,将缓存设置到缓存模块中。
108.缓存模块则可以为简单的lru(least recently used,最近最少使用原则)缓存。
109.通用数据结构中包括鉴权上下文,这是拦截器之间的接口。
110.工具函数中包含一些字符串操作、时间操作等操作。
111.一个例子中,认证代理服务器通过如下方式完成身份认证过程,参见图6:
112.认证代理服务器包括准备拦截器、统计拦截器、鉴权拦截器以及缓存拦截器。
113.准备拦截器可接收用户发起的http访问请求,并设置请求的id,同时将http请求转换为身份认证请求,之后,通过快速失败检查器检查身份认证请求是否命中快速失败缓存,如果存在,则根据快速失败缓存对身份认证请求进行身份认证;如果不存在,将该身份认证请求发送到统计拦截器。其中,通过快速失败检查器处理身份认证请求的方式可以是:判断本地缓存中是否已经缓存有所述身份认证请求,若存在则从所述本地缓存中获取身份认证请求的鉴权结果。
114.统计拦截器在接收到身份认证请求后,会判断身份认证请求中的认证字符串是否为智能云v1版本,若是,则根据本地保存的映射表,找到与身份认证请求id对应的标识上下文信息,统计满足智能云v1版本的标识上下文信息数量,标识上下文信息的数据结构由整型的id、布尔类型的is_fetching(表明是否正在拉取)、atmoic《time_t》类型的拉取开始时间以及整型的计数值构成。当数量超过被标记为热点客户的最低值,为当前身份认证请求打上“热点客户”标记,继续获取身份认证请求中的访问密钥id。当该访问密钥id是此前未出现过的,或,该访问密钥id对应有拉取失败记录,则为身份认证请求从认证服务器拉取派生密钥。若标识上下文信息数量未能超过标记为热点客户的最低值,则将身份认证请求发送至鉴权拦截器。
115.鉴权拦截器接收到身份认证请求后,会根据本地缓存确定是否对身份认证请求进行本地鉴权,如果不能对身份认证请求进行本地鉴权,判断是否需要为身份认证请求拉取派生密钥,若需要,则在拉取派生密钥后对身份认证请求进行鉴权处理,若不需要,则将身份认证请求发送给认证服务器进行鉴权认证。
116.缓存拦截器,能够解析认证服务器返回的对请求的响应,也就是在身份认证请求不被本地处理的情况下,接收认证服务器的响应结果并进行缓存。如果返回2xx,则在缓存拦截器中设置成功缓存;如果返回4xx,则在缓存拦截器中设置失败缓存。
117.上述准备拦截器的整体处理流程如图7所示:
118.准备拦截器先接收到业务线的http请求,为其设置id以便对请求进行梳理,同时对http进行数据结构化处理,将http请求转化为鉴权请求,并根据缓存信息构建鉴权上下文,其中,缓存信息包括缓存上下文信息和应用程序接口信息、标识符信息等,缓存上下文信息包括派生密钥、令牌及验证结果等信息。若不能生成鉴权上下文,则结束。
119.生成鉴权上下文后,通过快速失败检查器检查该鉴权上下文是否在本地缓存中存在,若存在,直接从本地缓存中获取鉴权上下文的鉴权结果,进入快速失败;若不存在,则进入统计拦截器。鉴权上下文即身份认证请求。
120.上述统计拦截器的整体处理流程如图8所示:
121.在为身份认证请求拉取派生密钥的过程中进行并发控制,统计拦截器先接收携带标识符的身份认证请求,可以周期性地将保存有身份认证请求和标识上下文信息映射关系的映射表清空,根据标识符新建一个对应的标识上下文并将标识符对应的身份认证请求与新建标识上下文的对应关系存入映射表。
122.统计当前标识上下文的个数,判断统计得到的个数是否大于预设阈值,若大于,则将身份认证请求标记为热点客户的身份认证请求;还可以通过特权客户名单筛选属于特权客户的身份认证请求,将特权客户的身份认证请求标记为热点客户的身份认证请求。
123.若标识符不是ak(accesskeyid,访问密钥id)类型也不是预设版本,则不对标识符所属身份认证请求拉取派生密钥;若标识符是ak类型也是预设版本,则尝试为标识符所属的身份认证请求拉取派生密钥,在拉取失败的情况下,如果等待时间超过预设时长且没有超过预设拉取次数,则继续拉取派生密钥;如果等待时间超过预设时长且超过预设拉取次数,则不拉取派生密钥。
124.参见图9,其中,每一个身份认证请求的标识符包括int类型的标识id信息、enum类型的type信息(enum类型的type信息包括ak类型、token(令牌)id及user(用户)id)、bool类型的is_top信息(is_top信息用于表示标识符是否对应热点客户),bool类型的need_fetching信息(need_fetching信息用于判断是否需要拉取派生密钥)。
125.每一个身份认证请求对应的标识上下文包括atmoic《time_t》类型的fetching_start_time信息(fetching_start_time信息用于表示拉取派生密钥的起始时间),int类型的count信息(count信息用于对当前标识上下文进行计数)。
126.accessor为存取器,modifiers为编辑器。
127.一个例子中,统计拦截器的处理流程还可以包括:
128.接收携带标识符的身份认证请求;
129.判断标识符的类型是否为ak,且是预设版本的认证字符串,若不是,则直接通过;
130.判断身份认证请求和标识上下文的映射表是否需要清空,若需要则清空;
131.根据映射表找到与访问密钥id对应的标识上下文;若没找到,则根据访问密钥id新建一个标识上下文;
132.对当前标识上下文的个数进行统计;
133.判断计数结果是否超过被标记为热点客户的最低阈值;
134.若是,则将当前身份认证请求标记为热点客户的身份认证请求,将标识符的is_top信息置为true;
135.判断是否需要为热点客户的身份认证请求拉取派生密钥;一个例子中,可以根据身份认证请求的同时拉取字段和正在拉取字段判断;
136.若是,判断拉取派生密钥的起始时间,如果时间超过预设时长,则重新从认证服务器中拉取派生密钥,重置了拉取起始时间,此时将身份认证请求中的同时拉取字段设置为false;
137.如果时间没有超过预设时长,将身份认证请求中的同时拉取字段设置为true;
138.若不需要为热点客户的身份认证请求拉取派生密钥,将身份认证请求的正在拉取字段设置为true,设置拉取起始时间,将身份认证请求中的同时拉取字段设置为false;
139.如果计数结果没有超过被标记为热点客户的最低阈值,说明当前身份认证请求不
是热点客户的身份认证请求,直接返回即可;
140.当接收到认证服务器对于拉取派生密钥的响应,将标识上下文的正在拉取字段设置为false,并设置拉取时间。
141.上述鉴权拦截器的处理流程如图10所示:
142.鉴权拦截器接收统计拦截器输出的鉴权上下文,这里的鉴权上下文是指身份认证请求,如果本地缓存中有身份认证请求的认证结果,则在本地完成处理,否则,当判断需要为身份认证请求拉取派生密钥时,为其打上需要拉取派生密钥的标志,从认证服务器拉取派生密钥以对身份认证请求进行认证处理;当不需要为身份认证请求拉取派生密钥时,则将其发送到认证服务器进行认证处理。
143.另一方面,本公开实施例还提供了一种身份认证系统,参见图11,包括:业务端的认证代理服务器1101,业务端的业务服务器1103和认证端的认证服务器1102;
144.所述认证代理服务器,用于获取所述业务服务器对应的身份认证请求;所述身份认证请求中包含认证字符串;根据所述认证字符串,判断是否需要从认证端的认证服务器中拉取所述身份认证请求的派生密钥;若是,则从所述认证端的认证服务器中拉取所述身份认证请求的派生密钥,并根据所述派生密钥对所述身份认证请求进行鉴权认证;若否,则通过本地缓存对所述身份认证请求进行鉴权认证;
145.所述业务服务器,用于在所述身份认证请求鉴权认证通过的情况下,响应所述身份认证请求对应的访问请求;
146.所述认证端的认证服务器,用于生成所述身份认证请求的派生密钥。
147.一个例子中,所述认证代理服务器还用于判断本地缓存中是否已经缓存有所述身份认证请求,若存在则从所述本地缓存中获取身份认证请求的鉴权结果;若不存在,则触发执行根据所述认证字符串,判断是否需要从认证服务器中拉取所述身份认证请求的派生密钥的步骤。
148.一个例子中,所述认证代理服务器具体用于,当所述认证字符串表示所述身份认证请求属于预设版本时,更新所述预设版本对应的身份认证请求计数;
149.判断所述预设版本对应的身份认证请求计数是否大于预设阈值;
150.若大于,则基于本地缓存中是否缓存有所述认证字符串中的访问密钥标识id,来判断是否需要为所述身份认证请求从认证服务器拉取派生密钥。
151.一个例子中,所述认证代理服务器还用于确定从所述认证服务器拉取派生密钥的开始时间;
152.当距离所述开始时间的时长达到预设时长、且未获取到所述派生密钥的情况下,重新从所述认证服务器中拉取所述身份认证请求的派生密钥;
153.在距离重新开始拉取时刻的时长大于预设时长、且未获取到所述派生密钥的情况下,生成与访问密钥id对应的拉取失败记录;
154.在重新拉取到派生密钥的情况下,将重新拉取的派生密钥缓存到本地缓存中。
155.一个例子中,所述认证代理服务器具体用于当所述访问密钥id不同于缓存中的任一访问密钥id,或者,所述访问密钥id对应有拉取失败记录的情况下,判定需要为所述身份认证请求向认证服务器拉取派生密钥。
156.一个例子中,所述认证代理服务器具体用于,根据所述本地缓存中的派生密钥对
所述身份认证请求进行鉴权认证;或,判断所述本地缓存中是否已经缓存有所述身份认证请求,若存在则从所述本地缓存中获取身份认证请求的鉴权结果。
157.另一方面,本公开实施例还提供一种身份认证装置,参见图12,所述装置包括:
158.预处理模块1201,用于获取所述业务服务器对应的身份认证请求;所述身份认证请求中包含认证字符串;
159.判断模块1202,用于根据所述认证字符串,判断是否需要从认证服务器中拉取所述身份认证请求的派生密钥;
160.拉取模块1203,用于若需要从认证服务器中拉取所述身份认证请求的派生密钥,则从所述认证服务器中拉取所述身份认证请求的派生密钥,并根据所述派生密钥对所述身份认证请求进行鉴权认证;
161.本地处理模块1204,用于若不需要从认证服务器中拉取所述身份认证请求的派生密钥,则通过本地缓存对所述身份认证请求进行鉴权认证。
162.一个例子中,参见图13,所述装置还包括快速认证模块1301;
163.所述快速认证模块1301用于,判断本地缓存中是否已经缓存有所述身份认证请求,若存在则从所述本地缓存中获取身份认证请求的鉴权结果;若不存在,则触发执行所述判断模块。
164.一个例子中,所述判断模块具体用于,当所述认证字符串表示所述身份认证请求属于预设版本时,更新所述预设版本对应的身份认证请求计数;判断所述预设版本对应的身份认证请求计数是否大于预设阈值;若大于,则基于本地缓存中是否缓存有所述认证字符串中的访问密钥id,来判断是否需要为所述身份认证请求从认证服务器拉取派生密钥。
165.一个例子中,参见图14,所述装置还包括拉取结果记录模块1401,所述拉取结果记录模块1401用于,确定从所述认证服务器拉取派生密钥的开始时间;当距离所述开始时间的时长达到预设时长、且未获取到所述派生密钥的情况下,重新从所述认证服务器中拉取所述身份认证请求的派生密钥;在距离重新开始拉取时刻的时长大于预设时长、且未获取到所述派生密钥的情况下,生成与访问密钥id对应的拉取失败记录;在重新拉取到派生密钥的情况下,将重新拉取的派生密钥缓存到本地缓存中。
166.一个例子中,所述判断模块具体用于:
167.当所述访问密钥id不同于缓存中的任一访问密钥id,或者,所述访问密钥id对应有拉取失败记录的情况下,判定需要为所述身份认证请求向认证服务器拉取派生密钥。
168.一个例子中,所述本地处理模块具体用于,根据所述本地缓存中的派生密钥对所述身份认证请求进行鉴权认证;或,判断所述本地缓存中是否已经缓存有所述身份认证请求,若存在则从所述本地缓存中获取身份认证请求的鉴权结果。
169.本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
170.根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
171.电子设备用于实现本公开中任一身份认证方法。
172.可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现本公开中任一身份认证方法。
173.当计算机程序产品在计算机上运行时,使得计算机执行本公开中任一身份认证方法。
174.图15示出了可以用来实施本公开的实施例的示例电子设备1500的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
175.如图15所示,设备1500包括计算单元1501,其可以根据存储在只读存储器(rom)1502中的计算机程序或者从存储单元1508加载到随机访问存储器(ram)1503中的计算机程序,来执行各种适当的动作和处理。在ram 1503中,还可存储设备1500操作所需的各种程序和数据。计算单元1501、rom 1502以及ram 1503通过总线1504彼此相连。输入/输出(i/o)接口1505也连接至总线1504。
176.设备1500中的多个部件连接至i/o接口1505,包括:输入单元1506,例如键盘、鼠标等;输出单元1507,例如各种类型的显示器、扬声器等;存储单元1508,例如磁盘、光盘等;以及通信单元1509,例如网卡、调制解调器、无线通信收发机等。通信单元1509允许设备1500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
177.计算单元1501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1501的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元1501执行上文所描述的各个方法和处理,例如身份认证方法。例如,在一些实施例中,身份认证方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1508。在一些实施例中,计算机程序的部分或者全部可以经由rom1502和/或通信单元1509而被载入和/或安装到设备1500上。当计算机程序加载到ram 1503并由计算单元1501执行时,可以执行上文描述的身份认证方法的一个或多个步骤。备选地,在其他实施例中,计算单元1501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行身份认证方法。
178.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、复杂可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
179.用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件
包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
180.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
181.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
182.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
183.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
184.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
185.上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1