具体实施方式
本申请的资源访问控制方法,结合图1所示的一种可选的应用场景来进行说明,该图1中包括服务器11,该服务器11中存储有各种资源,该资源包括但不限于:文档、图片、网页等等;用户12可能想要访问其中的某些资源。比如,服务器11是某个公司的服务器,其中存储了该公司的一些内部文件,用户12是该公司的员工,需要访问其中的文件来进行办公处理。
具体的,用户12可以通过网络13登录服务器11进行资源访问,例如用户可以使用手机14、或者台式机15或者笔记本电脑16等各种终端连接网络。此时,服务器11需要进行资源访问控制,比如查看用户是否具有对该资源的访问权限,或者查看用户到底具有怎样的访问权限等,本实施例的资源访问控制方法将详细描述服务器如何进行访问控制,而且该方法将使得用户在请求访问资源时更加快速的处理该访问请求,以加快用户的访问速度。
参见图2,示例性的示出了一种服务器的结构框图,该服务器可以包括:处理组件21,该处理组件中可以进一步包括一个或多个处理器;该服务器还包括以存储器22所代表的存储器资源,用于存储可由处理组件21执行的指令,例如可以存储某些应用程序,本实施例中,用于实现资源访问控制方法的指令就可以存储在该存储器22中,处理组件21可以调用存储器22中的指令以执行资源访问控制方法。其中,本实施例不限制资源的存储位置,上述的资源可以与该指令都存储在图2中的服务器上,比如存储在存储器22中;或者也可以存储在其他的地方,比如另外的存储器或者其他服务器等。
此外,该服务器还可以包括一个电源组件23,用于提供该服务器的电力提供和电源管理;还包括一个有线或无线的网络接口24,可以用于将服务器连接到网络,比如通过该网络接口24,服务器可以与用户使用的终端(例如手机、电脑等)进行通信,接收终端发送的资源访问请求,将资源提供至终端等。还可以提供一个输入输出(I/O)接口25,用于数据的输入输出。该服务器可以基于存储在存储器22中的操作***进行操作。
服务器11中的处理组件21调用执行存储器22中的指令,执行如下的资源控制方法,参见图3所示的流程,该流程简单的说明了该控制方法的主体思想:
301、接收客户端发送的用于请求访问资源的资源访问请求,该请求包括:资源对应的加密后的资源标识、访问操作标识、以及使用客户端请求访问资源的用户对应的用户标识;
其中,该客户端就是指的图1中所示的用户访问资源所使用的终端,例如手机、笔记本电脑等设备。该资源指的是存储在服务器11上的诸如文档、图片、网页等各种类型的内容。而使用客户端请求访问资源的用户,指的是图1中的用户12,比如该用户12使用手机登录服务器请求访问服务器中的某些文件。
本步骤中,服务器接收到的用户请求访问资源的资源访问请求,例如是以如下方式发送的:比如,用户使用自己的台式电脑进行办公,连接到公司的服务器,该用户的电脑上可以将服务器中存储的资源显示在电脑上呈现给用户,用户可以看到文档A、图片B等各种资源,当用户想要访问文档A时,可以用鼠标点击该文档A,此时就相当于发送了对于文档A的访问请求。
该访问请求中包括的资源标识,就是文档A的标识,在本实施例中该标识是用私钥加密过的;请求中包括的访问操作标识指的是,用户想要对文档A进行“写”的操作,即编辑或者修改文档A,比如用户在点击访问文档A时具体是点击了写文件的图标,那么此时请求中就携带了该写操作的请求,该“写”就可以理解为一种访问操作,其标识例如用“00”表示,而用“01”表示“读”的访问操作。当然这是一种示例方式,具体实施中可以灵活设定。请求中包括的用户标识例如是用“001”表示该用户。该用户标识即用户ID,可以是与用户名对应的由服务器分配的用户ID,在对用户在登录服务器时输入的用户名和密码验证通过后返回的对应用户ID,之后在后续的服务器访问中只要用户输入自己的用户名和密码,所发送的相关信息比如资源访问请求中都会携带该用户ID。
每个用户在登录服务器时,其权限是预定好的,比如上述例子中的请求访问文档A的用户,可能该用户对服务器中的资源访问权限仅仅是“读”,他不允许“写”服务器中的资源,服务器中会生成该用户的标识“001”和用户预定的访问操作的权限“01”(即读)这两者的组合对应的公私钥对,上述资源访问请求中携带的资源标识就是用该公私钥对中的私钥加密的,而请求中携带的访问操作标识,是用户实际要请求的资源操作,例如用户的权限是“读”,但是他请求“写”资源A,那么请求中携带的还是写的标识“00”。
302、获取与用户标识和访问操作标识对应的公钥,使用公钥对资源标识进行解密,在解密成功时确定资源标识是使用上述用户标识和访问操作标识对应的私钥加密,则将资源提供至客户端。
本步骤中,服务器用公钥解密上述加密的资源标识,如果用户请求访问资源时的访问操作请求与自己的访问权限是一致的,比如用户的权限是“读”,请求中携带的也是“读”,那么服务器可以查找到用户标识和访问操作标识对应的公钥,并且能够解密成功。解密成功就表明该用户具有对该资源的访问权限,是服务器的授权用户并且用户请求的访问操作也是被允许的,则服务器将资源提供至客户端(比如,用户的手机或办公电脑)。
而如果用户请求访问资源时的访问操作请求与自己的访问权限不一致,比如用户的权限是“读”,但请求中携带的是“写”,那么服务器就无法查找到用户标识和访问操作标识对应的公钥,表明该用户没有资源访问权限,则拒绝用户的资源访问。
本实施例的资源访问控制方法,服务器在接收到用户的资源访问请求时,所做的处理是,查找与该用户的用户标识和访问操作标识对应的公钥并解密,如果解密成功则允许访问。这种方式尽管也要做查找,比如查找对应的公钥,但是查找的数据量是很小的,因为记录的对应关系的数量也就是用户的数量,比如某公司有20个用户,那也就有20条对应关系的表项,每一条表项记录某用户和权限及对应的公私钥,信息量很小,因此查询速度很快。
如下将通过一个完整的用户访问过程,更加详细的描述上述的访问控制:
假设某公司为D单位开发了一套该单位的办公***,该办公***运行在图1中的服务器11上,服务器11存储了该D单位的一些办公资源,例如是文档、图片等各种类型的资源。服务器11的存储器22中存储有用于控制资源访问的程序指令,该程序指令可以称为资源访问控制装置,服务器11的处理组件21调用执行该装置对应的指令来执行对上述资源的访问控制。
能够访问D单位的办公资源的人员通常是该单位的员工,假设用户Y1、Y2和Y3都是该单位的员工,那么这三个用户是有权限访问服务器11中存储的D单位资源的,而且默认这些用户是对单位的所有资源都可以访问,区别只在于不同人的访问权限有所区别,比如用户Y1只能“读”资源,而用户Y2可以“读和写”资源。在初始开发完成D单位的***时,要将上述的用户Y1、Y2和Y3加入到该***中,图4示例了一种可能的应用方式。
如图4所示,假设D单位的员工打开单位***中的注册界面,在注册界面中输入自己的用户名和密码后,点击注册,则客户端(即员工使用的电脑)发送新增用户请求,该请求可以被网管所使用的用户管理***接收到。网管将审核该注册信息,验证通过后,将赋予该新增的用户相应的权限(比如读或者写),网管点击“确定”,则将用户名、密码、权限一起发送给服务器11,相当于向服务器11发送了包括上述信息的新增用户请求,并假设该用户是只读用户。
服务器11收到新增用户请求之后,需要做如下处理:根据用户名和密码,生成对应的用户ID,该用户ID也可以称为用户标识,并且生成与用户标识和访问权限对应的公私钥对。可以参见如下的表1:
表1 对应关系表
用户标识 |
访问操作标识 |
公钥 |
私钥 |
Y1 |
读 |
*** |
*** |
Y2 |
读+写 |
*** |
*** |
Y3 |
读 |
*** |
*** |
如表1所示,用户标识起到了标识该用户的作用,这里的访问操作标识用于表示用户的访问操作权限,比如在新增用户时设定的用户对应的“读”权限,或者“读和写”权限等,限定了用户在访问***时只能具有怎样的访问操作,比如“读”权限的用户是不能“写”资源的,例如不能编辑或修改文档。
需要说明的是,用户标识和访问操作标识,为了生成公私钥对,可以预先转换成密钥生成算法所需要的格式,比如用“00”表示“读”,用“01”表示“读和写”等,具体如何转换可以根据算法需要设定。公私钥的生成可以采用常用的一些算法,例如RSA。本实施例中,相当于“用户标识+访问操作标识”与“公钥+私钥”的对应关系,而且,在表1中,每一个用户对应的一条对应关系可以称为一条表项,那么对应关系表中的表项数量等于用户的数量;例如上述的例子中,D单位有三个员工Y1、Y2和Y3,那么表1中的表项有三条。
该对应关系的使用是在用户访问资源的时候,用于鉴权的,后面详述。此外,为了增加兼容性,本实施例也可以应用于对传统的控制方式进行改进,比如,传统方式中可能是在数据库中存储了大量的对应关系数据,包括用户、资源、权限之间的对应关系,本实施例可以扫描数据库,即根据数据库中的信息,生成与(用户+权限)对应的公私钥对。
进一步的,表1中所示的对应关系,可以存储在缓存中,以更快的读取。比如,当***启动时,扫描该数据库中存储的用户标识和权限等信息,并生成对应的密码对和对应关系,放入缓存,用户在请求访问资源时,查找缓存中的该对应关系进行鉴权使用,此时,一方面对应关系表中的表项数量由于与用户数量相当,信息量较少,查找起来会比较快;另一方面,该对应关系由于信息量少,可以存储在缓存中,更加可以加快对应关系的查找速度,从而提高了访问鉴权速度和用户的资源访问效率。
上述描述的是在用户访问资源之前所进行的准备,生成了与用户和权限对应的公私钥对,并存储该公私钥对以供后续鉴权时使用。需要说明的是,在***中增加的用户都是默认对***的所有资源具有访问权限的(区别在于不同的用户具有不同的访问权限),而没有资源访问权限(比如非本单位用户是不能访问该单位内网的任何资源的)的用户是不会在***中新增的。对应的,如果要删除某个用户,可以通过网管在管理界面上启动删除用户的功能,发送删除用户请求给服务器,服务器据此删除该用户的标识和对应的公私钥等信息。
接着,假设用户开始访问资源,用户Y1使用电脑登陆单位的办公***,查找自己想要访问的资源,假设进入到图5所示的界面。图5中显示了用户Y1进入到某个文件夹,并且想要查看其中的“旅游图片”的文件夹,则用户点击该文件夹,将进入其中的图片列表。本实施例中,用户点击“旅游图片”的文件夹时,相当于发出了请求显示资源标识的资源显示请求,因为用户最终要访问的资源是该“旅游图片”文件夹中包括的各个图片,比如图片t1、图片t2和图片t3等,该t1、t2等可以称为资源标识,即用于标识各个图片的,而用户点击“旅游图片”的文件夹,相当于请求显示下一级的图片,所以可以称为资源显示请求。
具体的,该资源显示请求包括:用户标识和请求执行的访问操作对应的访问操作标识。其中的用户标识可以是用户账号,用户已经登录在***了,因此用户在***中的操作可以都携带上其标识;而请求执行的访问操作,在上述的例子中,用户点击图片,默认是“读”该图片,即用户请求读旅游图片,那么请求执行的访问操作就是读。在用户点击“旅游图片”的文件夹时,客户端即用户的电脑向服务器发送了携带用户标识和访问操作标识的资源显示请求。
需要说明的是,该资源显示请求中携带的访问操作标识与表1中的“访问操作标识”是不同的,表1中的“访问操作标识”是初始设定的用户访问权限,而资源显示请求中携带的访问操作标识是用户实际访问时所请求的操作,与权限是无关的,用户即使没有“写”的权限也可以点击请求去“写”某个资源,只要后续鉴权时拒绝用户的该无权操作即可。图5中只是一种示例,实际实施中,用户也可以通过其他方式发送资源显示请求。
仍参考图5,服务器在接收到资源显示请求后,在向用户显示资源列表之前,会对资源标识进行加密,在加密之后,显示给用户的图片列表中,各图片的标识是已经加密过的标识。图6示出了对资源标识加密的流程:
601、服务器根据用户标识和访问操作标识,查找对应的私钥;
其中,服务器在接收到资源显示请求后,根据请求中携带的用户标识和访问操作标识,比如“用户Y1”和“读”去查找之前存储在缓存中的对应关系。如果能查到对应的私钥,则继续603;否则,执行602。
602、服务器向客户端返回提示用户没有权限;
例如,参见表1,用户Y1是只有“读”资源的权限的,如果用户Y1想要“写”某个资源,比如点击了某资源链接中的用于编辑文档的链接,则相当于请求中携带的是“用户Y1+写操作请求”,此时服务器查找表1(当然实际存储时也可以不是以表格的形式存储),发现无法找到对应的私钥,因为Y1的私钥是与“用户Y1+读”对应的。因此,服务器可以确定用户Y1没有访问权限,向客户端(即用户使用的电脑)返回提示用户没有权限。
603、服务器根据资源标识生成资源摘要;
604、服务器使用私钥对资源摘要进行加密生成签名;
需要说明的是,在查找到私钥后,服务器也可以使用私钥直接对资源标识进行加密;然而通常的,资源标识通常比较长,可以将资源标识生成资源摘要,摘要的生成方法例如采用哈希算法得到某个对应的比较简短的标识,然后使用私钥对该标识进行加密生成签名,签名即加密后的标识。
此外,对资源标识进行签名还有如下好处:当资源标识是比较规律的时候,通过对资源标识进行签名可以增加用户遍历访问资源的成本。比如,用户A访问了a,b,c这三个资源,他们的标识分别是123,124,125,用户有可能会根据资源标识的规律越权访问资源;那么通过对资源标识做加密签名处理,使得资源标识没有规律,返回的加密后的资源标识就是一串无意义或者无规律可循的资源标识,比如,1Af@#89.类似,使得遍历访问资源的成本提高,可以在一定程度上防止用户随意访问资源。
605、服务器向客户端返回签名后的资源标识。
本步骤服务器返回签名后的标识,例如是图5中的图片列表中的图片标识t1、t2和t3等。
然后,用户通过自己的电脑查看显示的图片列表,并选择具体想要查看或者编辑哪张图片。假设用户Y1要读图片t2,那么其点击图2中的列表中的t2标识,此时相当于发送了用于请求访问资源的资源访问请求,具体是用户在客户端(电脑)点击资源标识后,客户端向服务器发送的该请求,如上所述的,其中的资源标识t2是签名后的标识。并且,请求中携带了加密后的资源标识、访问操作标识(假设用户Y1要执行“读”)、以及用户标识。
服务器在接收到该资源访问请求后,根据图7进行如下处理:
701、服务器根据用户标识和访问操作标识查找对应的公钥;
其中,服务器在接收到资源访问请求后,根据请求中携带的用户标识和访问操作标识,比如“用户Y1”和“读”去查找之前存储在缓存中的对应关系。如果能查到对应的公钥,则继续703;否则,执行702。
702、服务器向客户端返回提示用户没有权限;
例如,参见表1,用户Y1是只有“读”资源的权限的,如果用户Y1想要“写”某个资源,比如点击资源标识对应的“编辑”选项,则相当于请求中携带的是“用户Y1+写操作请求”,此时服务器查找表1,发现无法找到对应的公钥,因为Y1的公钥是与“用户Y1+读”对应的。因此,服务器可以确定用户Y1没有访问权限,向客户端返回提示用户没有权限。
703、服务器使用公钥对资源标识进行解密获取摘要;
检查是否解密成功;
如果解密成功,表明公钥和私钥对应的是同一个用户,则继续705;否则,执行704。
704、服务器向客户端返回提示用户没有权限;
例如,这种可能的情况是,用户Y2点击了“旅游图片”的文件夹,即发送了资源显示请求,用户Y2的权限是“写”(读和写,也相当于写),服务器根据“用户Y2标识+写”对应的私钥加密资源标识后,显示给用户图片列表。但是,有可能其他用户截取到了签名加密后的资源标识,想要访问,比如用户Y1对资源只有“读”的权限,Y1窃取到上述加密后的资源标识后,点击标识发送了资源访问请求,此时服务器要查找“Y1”对应的公钥解密,但是记录的对应关系是“Y1+读”的对应公钥,并没有“Y1+写”对应的公钥,则确定没有权限。
705、服务器根据请求访问的资源对应的资源标识生成第一资源摘要;
本实施例中,服务器在解密成功后确定发送资源显示请求和资源访问请求的是同一个用户,则可以直接执行708,将资源提供给用户访问;进一步的,本步骤还可以在解密成功后,向用户提供资源之前,服务器根据请求访问的资源对应的资源标识生成资源摘要,可以称为第一资源摘要。
706、服务器检查第一资源摘要与解密成功得到的第二资源摘要比较,判断两者是否相同;
本步骤中,服务器将705中得到的第一资源摘要与703中解密得到的第二资源摘要比较,若两者相同,则表明用户前后访问的资源是一致的,这样可以防止资源标识被篡改,并执行708;否则,执行707。
707、服务器向客户端返回提示用户没有权限;
708、服务器提供资源给客户端。
可选的,具体实施中,也可以在数据库中包括用户Id,用户名,密码,用户权限(不区分权限对应的资源),不生成公私钥,不对资源标识进行加密;每次用户请求的时候***去数据库中取出对应记录查看下访问权限是否足够,这样方式相比于传统方式也会在一定程度上加快资源访问速度。
根据上述的资源访问控制方法的过程,本申请实施例还提供一种资源访问控制装置,该装置存储在图2所示的服务器的存储器22中,用于实现上述的资源访问控制方法。如图8所示,该装置包括:请求接收单元81和控制处理单元82;其中,
请求接收单元81,用于接收客户端发送的用于请求访问资源的资源访问请求,所述资源访问请求包括:所述资源对应的加密后的资源标识、访问操作标识、以及使用所述客户端请求访问资源的用户对应的用户标识;
控制处理单元82,用于获取与所述用户标识和所述访问操作标识对应的公钥,使用所述公钥对所述资源标识进行解密,在解密成功时确定所述资源标识是用所述用户标识和访问操作标识对应的私钥加密,则将资源提供至客户端。
进一步的,该装置还可以包括:用户管理单元83,用于生成所述用户对应的用户标识,并根据所述用户标识和访问操作标识生成对应的公私钥对,所述访问操作标识用于表示所述用户的访问操作权限。
进一步的,请求接收单元81,还用于在所述接收客户端发送的用于请求访问资源的资源访问请求之前,接收用于请求显示资源标识的资源显示请求,该资源显示请求包括:所述用户标识和请求执行的访问操作对应的访问操作标识;
控制处理单元82,还用于获取与所述用户标识和访问操作标识对应的私钥,并使用所述私钥加密所述资源标识后显示给所述客户端。
进一步的,控制处理单元82,还用于在使用所述公钥对所述资源标识进行解密并解密成功之后,在将所述资源提供至所述客户端之前,根据请求访问的资源对应的资源标识生成第一资源摘要,并将所述第一资源摘要与所述解密成功得到的第二资源摘要比较,确定两者相同。
需要注意的是,本申请的技术方案并不仅仅局限于上述实施例所列举的场景中,只要涉及到文件访问时的权限管理问题,都可以采用本申请的技术方案进行权限管理。同样,也并不仅仅局限于局域网或者企业内部网络的权限管理,也可以应用到广域网的场景下,比如一些在线的文档编辑应用等等。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。