发明内容
本公开实施例至少提供一种签名的方法、装置、计算机设备及存储介质。
第一方面,本公开实施例提供了一种签名的方法,应用于应用服务端,包括:
获取并存储云服务端提供的账号信息,所述账号信息包含用于生成临时动态密钥的静态密钥对;
响应应用客户端的临时动态密钥获取请求,基于存储的所述静态密钥对,为所述应用客户端生成临时动态密钥;
将所述临时动态密钥返回给所述应用客户端,所述临时动态密钥用于所述应用客户端生成签名信息。
第二方面,本公开实施例提供了一种签名的方法,应用于应用客户端,包括:
向应用服务端发送临时动态密钥获取请求,并接收所述应用服务端返回的临时动态密钥;所述临时动态密钥为所述应用服务端基于预先从云服务端获取并存储的静态密钥对生成的动态密钥;
基于所述临时动态密钥生成签名密钥;
基于所述签名密钥对待签字符串进行签名,生成签名信息。
一种可能的实施方式中,向应用服务端发送临时动态密钥获取请求,包括:
按照预设时间间隔向应用服务端发送临时动态密钥获取请求;所述临时动态密钥获取请求中包含有效期信息,所述有效期信息所指示的有效时间长度大于或等于所述预设时间间隔。
一种可能的实施方式中,基于所述临时动态密钥生成签名密钥,包括:
基于所述临时动态密钥中的第一静态密钥,以及约定的第一方法,生成所述签名密钥;所述第一静态密钥为用于生成所述临时动态密钥的静态密钥对中的一个密钥字符串。
一种可能的实施方式中,基于所述临时动态密钥中的第一静态密钥,以及约定的第一方法,生成所述签名密钥,包括:
基于所述第一静态密钥、签名的日期、服务类型信息,以及约定的第一方法,生成所述签名密钥。
一种可能的实施方式中,基于所述签名密钥对待签字符串进行签名,生成签名信息,包括:
基于所述签名密钥,按照约定的第二方法,对待签字符串进行签名,生成所述签名信息。
一种可能的实施方式中,所述待签字符串包括以下信息中的至少一种:
目标应用的相关服务信息、以及当前对应的请求时间。
第三方面,本公开实施例还提供一种签名装置,应用于应用服务端,包括:
获取模块,用于获取并存储云服务端提供的账号信息,所述账号信息包含用于生成临时动态密钥的静态密钥对;
密钥生成模块,用于响应应用客户端的临时动态密钥获取请求,基于存储的所述静态密钥对,为所述应用客户端生成临时动态密钥;
发送模块,用于将所述临时动态密钥返回给所述应用客户端,所述临时动态密钥用于所述应用客户端生成签名信息。
第四方面,本公开实施例还提供一种签名装置,应用于应用客户端,包括:
发送模块,用于向应用服务端发送临时动态密钥获取请求;
接收模块,用于接收所述应用服务端返回的临时动态密钥;
密钥生成模块,用于基于所述临时动态密钥生成签名密钥;
签名模块,用于基于所述签名密钥对待签字符串进行签名,生成签名信息。
第五方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第六方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤,或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。
关于上述签名的装置、设备、及介质的效果描述参见上述签名的方法的说明,这里不再赘述。
本公开实施例提供的签名的方法、装置、计算机设备及存储介质,应用服务端可以预先获取并存储云服务端为目标应用的用户提供的在约定时期内长期有效的账号信息,账号信息中包含用于生成STS的静态密钥对,这样,应用服务端可以响应应用客户端的STS获取请求,基于存储的静态密钥对生成动态的STS并返回给应用客户端,应用客户端在获取到STS后,基于STS生成签名密钥,最后基于签名密钥生成签名信息。可见,由于本公开实施例中,应用服务端可以为应用客户端提供动态更新的STS,与在应用客户端中存储固定的STS相比,安全性更高;而且,应用服务端可以存储一个在约定时期内长期有效的静态密钥对,用于动态生成STS,应用客户端每次只需要向对应的应用服务端发起STS获取请求,无需向云服务端发起远程请求(应用客户端需要通过应用服务端向云服务端发起远程请求),缩短了签名路径,提高了访问效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
客户端在发起访问云服务的访问请求时,需要使用STS生成签名信息。采用将STS预先设置在客户端的方式灵活性较差、安全性较低;而客户端频繁向云服务端远程请求STS的方式,签名路径较长,导致访问效率较低,也对云服务端的资源损耗较多。
基于上述研究,本公开提供了一种签名的方法,应用服务端预先获取并存储云服务端为目标应用的用户提供的长期有效的账号信息;客户端需要发起访问请求时,先向对应的应用服务端发起STS获取请求,应用服务端就可以基于存储的账号信息(静态密钥对)生成动态的STS并返回给客户端,客户端基于STS生成签名信息。这里,采用目标应用自己的应用服务端预先存储长期有效的账号信息(静态密钥对),该账号信息可以用于结合应用客户端临时的请求数据生成STS,客户端每次只需要向对应的应用服务端发起STS获取请求,无需向云服务端发起远程请求,缩短了签名路径,提高了访问效率,同时,由于应用服务端可以响应应用客户端每次发起的请求,临时生成动态更新的STS,该STS安全性更高。
上述问题的提出,是发明人经过实践并仔细研究的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种签名的方法进行详细介绍,本公开实施例所提供的签名的方法涉及应用服务端和应用客户端,应用服务端和应用客户端可以为具有一定计算能力的计算机设备。在一些可能的实现方式中,该签名的方法可以通过计算机设备中的处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的签名的方法的流程图,所述方法包括步骤S101~S105,其中:
S101:应用服务端获取并存储云服务端提供的账号信息,所述账号信息包含用于生成临时动态密钥的静态密钥对。
这里,区别于提供云服务的云服务端,应用服务端也即APP服务端,是由应用方开发与维护的。
在具体实施中,应用服务端预先获取并存储云服务端为目标应用的用户提供的在约定时期内长期有效的账号信息,账号信息中包含用于生成STS的静态密钥对。
这里,为方便管理目标应用的用户权限,云服务端为目标应用的用户提供访问云服务的账号,该账号的账号信息包括第一静态密钥(Secret Access Key,SK)和第二静态密钥(Access Key,AK)。所述SK和AK可以在一定的约定时期内一直有效。这里的约定时期可以是目标应用的提供方与云服务的提供方预先约定的。
S102:应用客户端向应用服务端发送临时动态密钥获取请求。
在具体实施中,应用客户端调用应用服务端提供的访问接口,向应用服务端发起STS获取请求。
另外,在一种实施方式中,应用客户端可以按照预设时间间隔(也即一定的周期)向应用服务端发送临时动态密钥获取请求;临时动态密钥获取请求中包含有效期信息,该有效期信息所指示的有效时间长度大于或等于所述预设时间间隔。
这里,为了减轻交互负担,应用客户端可以不用频繁向应用服务端请求获取STS,而是按照一定时间间隔获取。另外,应用服务端提供的STS也并非一次性有效,可以具有一定的有效期,在具体实施中,在获取到STS后,可以对STS进行缓存,缓存时间也即STS的有效期。
在具体实施中,可以设置请求获取STS的时间间隔小于或等于有效期信息所指示的有效时间长度,从而在减轻交互负担的同时,实现了STS对于应用客户端的可用性,保证了应用客户端的正常签名及访问。
S103:应用服务端基于存储的静态密钥对,为应用客户端生成临时动态密钥,并将所述临时动态密钥返回给应用客户端。
这里,应用服务端基于存储的AK和SK,通过开源的算法为所述应用客户端生成STS。
具体的,STS中可以包括上述所述的SK、AK、以及有效期,也即过期时间(ExpiredTime)。除此之外,还可以包括令牌信息,也即会话控制令牌(Session Token),后续应用客户端发送访问请求时会携带该Session Token,用于后续的认证过程。
S104:应用客户端基于临时动态密钥生成签名密钥(Signed Key)。
在具体实施中,应用客户端可以基于临时动态密钥中的第一静态密钥,以及约定的第一方法,生成签名密钥;第一静态密钥为用于生成所述临时动态密钥的静态密钥对中的一个密钥字符串;第一静态密钥(这里为SK)是静态密钥对中不在云服务请求中发送给云服务端的一个密钥字符串,静态密钥对中另外一个密钥AK是会在云服务请求中发送给云服务端的密钥字符串。静态密钥对中的SK用于生成STS,并进一步用于应用客户端进行签名,应用客户端在发起签名的认证请求时,会在认证请求中携带AK。
这里,约定的第一方法可以是多种开源加密算法之一,比如HMAC算法等。
进一步地,可以基于所述第一静态密钥、签名的日期、服务类型信息,以及约定的第一方法,生成所述签名密钥。
在具体实施中,应用客户端可以基于STS中的静态参数,以及其它一些与目标应用相关的静态参数(服务类型)或动态参数(签名的日期等),生成Signed Key;这样,SignedKey一方面表征了静态的用户权限信息(比如上述STS中的静态参数),另一方面也表征了与目标应用相关的信息,以及与最近的请求相关的动态更新特征(签名的日期),这里签名的日期的格式为预先约定的,比如20200201。
这里,上述服务类型信息具体可以是直播服务、或会议服务、或视频点播(VideoOn Demand,VOD)服务等。
S105:应用客户端基于所述签名密钥对待签字符串进行签名,生成签名信息。
这里,待签字符串可以包括目标应用的相关服务信息、以及当前对应的请求时间(DateTime)等,其中,相关服务信息比如包括:应用客户端所在的服务区域信息(Region)、应用标识(App ID)等;请求时间可以是当前具体的时间点,是比上述签名的日期更细粒度的时间,表达格式不限。
在具体实施中,应用客户端基于S104中生成的Signed Key,按照约定的第二方法,对待签字符串进行签名,这里,约定的第二方法可以是多种开源加密算法之一,比如SHA256算法。
示例性的,可以采用上述App ID、Region、DateTime构造待签字符串(ToSign),比如:Region:="cn-north-1";Date Time:="20200119T153002Z";App ID:="1001";ToSign:=Region+"\n"+DateTime+"\n"+Room ID。其中,每部分使用换行符"\n"分割,生成的待签字符串用于进行签名,生成签名信息。
在具体实施中,应用客户端在生成签名信息后,基于生成的签名信息,向应用服务端发起访问请求,也即超文本传输协议(Hyper Text Transfer Protocol,HTTP)请求,签名信息可携带于应用客户端发送的HTTP请求中,用于用户权限的认证。
下面,分别从应用客户端和应用服务端,描述本公开实施例的签名方法。
如图2所示,为应用客户端在签名流程中的执行逻辑流程图,包括:
S201:向应用服务端发送临时动态密钥获取请求,并接收所述应用服务端返回的临时动态密钥;所述临时动态密钥为所述应用服务端基于预先从云服务端获取并存储的静态密钥对生成的动态密钥。
这里,应用客户端可以按照预设时间间隔向应用服务端发送STS获取请求。
S202:基于所述临时动态密钥生成签名密钥。
这里,应用客户端基于STS中的第一静态密钥(SK)、签名的日期、服务类型信息,以及约定的第一方法,生成签名密钥。
S203:基于所述签名密钥对待签字符串进行签名,生成签名信息。
基于所述签名密钥,按照约定的第二方法,对应用客户端对应的包括Region、AppID等相关服务信息以及当前对应的DateTime在内的待签字符串进行签名,生成签名信息。
如图3所示,为应用服务端在签名流程中的执行逻辑流程图,包括:
S301:获取并存储云服务端提供的账号信息,所述账号信息包含用于生成临时动态密钥的静态密钥对。
S302:响应应用客户端的临时动态密钥获取请求,基于存储的所述静态密钥对,为所述应用客户端生成临时动态密钥。
S303:将所述临时动态密钥返回给所述应用客户端,所述临时动态密钥用于所述应用客户端生成签名信息。
关于应用服务端相关内容的描述详见上述图1相关内容的描述,这里不再赘述。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与签名的方法对应的签名的装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述签名的方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图4所示,为本公开实施例提供的一种签名的装置400的示意图,所述装置可以部署在应用服务端,包括:获取模块401、密钥生成模块402、发送模块403;其中,
获取模块401,用于获取并存储云服务端提供的账号信息,所述账号信息包含用于生成临时动态密钥的静态密钥对;
密钥生成模块402,用于响应应用客户端的临时动态密钥获取请求,基于存储的所述静态密钥对,为所述应用客户端生成临时动态密钥;
发送模块403,用于将所述临时动态密钥返回给所述应用客户端,所述临时动态密钥用于所述应用客户端生成签名信息。
参照图5所示,为本公开实施例提供的另一种签名的装置500的示意图,所述装置可以部署在应用客户端,包括:传输模块501、密钥生成模块502、和签名模块503;其中:
传输模块501,用于向应用服务端发送临时动态密钥获取请求,并接收所述应用服务端返回的临时动态密钥;所述临时动态密钥为所述应用服务端基于预先从云服务端获取并存储的静态密钥对生成的动态密钥;
密钥生成模块502,用于基于所述临时动态密钥生成签名密钥;
签名模块503,用于基于所述签名密钥对待签字符串进行签名,生成签名信息。
一种可能的实施方式中,传输模块501,具体用于:
按照预设时间间隔向应用服务端发送临时动态密钥获取请求;所述临时动态密钥获取请求中包含有效期信息,所述有效期信息所指示的有效时间长度大于或等于所述预设时间间隔。
一种可能的实施方式中,密钥生成模块502,具体用于:
基于所述临时动态密钥中的第一静态密钥,以及约定的第一方法,生成所述签名密钥;所述第一静态密钥为用于生成所述临时动态密钥的静态密钥对中的一个密钥字符串。
进一步地,密钥生成模块502,具体用于:
基于所述第一静态密钥、签名的日期、服务类型信息,以及约定的第一方法,生成所述签名密钥。
一种可能的实施方式中,签名模块503,具体用于:
基于所述签名密钥,按照约定的第二方法,对待签字符串进行签名,生成所述签名信息。
可选地,上述待签字符串包括以下信息中的至少一种:
目标应用的相关服务信息、以及当前对应的请求时间。
本公开实施例提供的签名的方法、装置、计算机设备及存储介质。应用服务端可以预先获取并存储云服务端为目标应用的用户提供的在约定时期内长期有效的账号信息,账号信息中包含用于生成STS的静态密钥对,这样,应用服务端可以响应应用客户端的STS获取请求,基于存储的静态密钥对生成动态的STS并返回给应用客户端,应用客户端在获取到STS后,基于STS生成签名密钥,最后基于签名密钥生成签名信息。可见,由于本公开实施例中,应用服务端可以为应用客户端提供动态更新的STS,与在应用客户端中存储固定的STS相比,安全性更高;而且,应用服务端可以存储一个在约定时期内长期有效的静态密钥对,用于动态生成STS,应用客户端每次只需要向对应的应用服务端发起STS获取请求,无需向云服务端发起远程请求(应用客户端需要通过应用服务端向云服务端发起远程请求),缩短了签名路径,提高了访问效率。
本公开实施例还提供了一种计算机设备,如图6所示,为本公开实施例提供的一种计算机设备600的结构示意图,包括:
处理器601和存储器602;
所述存储器602存储有处理器601可执行的机器可读指令,处理器601用于执行存储器602中存储的机器可读指令,在计算机设备为应用服务端的设备的情况下,所述机器可读指令被处理器601执行时,处理器601执行下述步骤:
获取并存储云服务端提供的账号信息,所述账号信息包含用于生成临时动态密钥的静态密钥对;
响应应用客户端的临时动态密钥获取请求,基于存储的所述静态密钥对,为所述应用客户端生成临时动态密钥;
将所述临时动态密钥返回给所述应用客户端,所述临时动态密钥用于所述应用客户端生成签名信息。
上述存储器602包括内存储器6021和外部存储器6022;内存储器6021也称内存,用于暂时存放处理器601中的运算数据,以及与硬盘等外部存储器6022交换的数据,处理器601通过内存6021与外部存储器6022进行数据交换。
在计算机设备为应用客户端的设备的情况下,所述机器可读指令被处理器601执行时,处理器601执行下述步骤:
向应用服务端发送临时动态密钥获取请求,并接收所述应用服务端返回的临时动态密钥;所述临时动态密钥为所述应用服务端基于预先从云服务端获取并存储的静态密钥对生成的动态密钥;
基于所述临时动态密钥生成签名密钥;
基于所述签名密钥对待签字符串进行签名,生成签名信息。
一种可能的实施方式中,处理器601执行的指令中,所述向应用服务端发送临时动态密钥获取请求,包括:
按照预设时间间隔向应用服务端发送临时动态密钥获取请求;所述临时动态密钥获取请求中包含有效期信息,所述有效期信息所指示的有效时间长度大于或等于所述预设时间间隔。
一种可能的实施方式中,处理器601执行的指令中,所述基于所述临时动态密钥生成签名密钥,包括:
基于所述临时动态密钥中的第一静态密钥,以及约定的第一方法,生成所述签名密钥;所述第一静态密钥为用于生成所述临时动态密钥的静态密钥对中的一个密钥字符串。
一种可能的实施方式中,处理器601执行的指令中,所述基于所述临时动态密钥中的第一静态密钥,以及约定的第一方法,生成所述签名密钥,包括:
基于所述第一静态密钥、签名的日期、服务类型信息,以及约定的第一方法,生成所述签名密钥。
一种可能的实施方式中,处理器601执行的指令中,所述基于所述签名密钥对待签字符串进行签名,生成签名信息,包括:
基于所述签名密钥,按照约定的第二方法,对待签字符串进行签名,生成所述签名信息。
一种可能的实施方式中,处理器601执行的指令中,所述待签字符串包括以下信息中的至少一种:
目标应用的相关服务信息、以及当前对应的请求时间。
上述指令的具体执行过程可以参考本公开实施例中所述的签名的方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的签名的方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的签名的方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的签名的方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。