掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本发明涉及软件信息领域,尤其涉及一种可实现横向扩展规则的系统登录认证权限校验方法。

背景技术

访问权限控制的应用性包括用户认证和用户授权两个部分。用户认证一般要求用户提供用户名和密码,系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作,在一个系统中,通常不同用户具有不同的操作权限,比如对一个文件来说,有的用户只能进行读取,而有的用户既可进行读取,也可进行修改,因此只有通过相应用户授权验证的用户才能进行相应操作。

目前主流使用的访问权限控制框架有以下几类:

(1)spring security框架,是一种能够提供安全访问控制解决方案的框架,其提供了一组可以在spring应用上下文中配置的Bean,利用Spring IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)为系统应用提供声明式的安全控制访问功能,它所有的架构也是基于认证和授权这两个核心功能去实现的。但其无法脱离Spring security框架,虽然功能强大,但属于重量级、配置繁琐、学习使用门槛高的安全框架。

(2)shiro框架,是一种强大且易用的安全框架,能够清晰处理身份验证、授权、管理会话以及密码加密。Shiro框架主要分为认证和授权两个部分,其提供了一个权限框架,它规定了授权和认证的流程步骤,具体实现需要开发者实现。优点是shiro可以用于非web环境,不跟任何框架或容器绑定,独立运行,缺点是授权第三方需要手动实现。

显然,现有的访问权限控制框架主要存在以下问题:

使用门槛高,操作复杂,导致校验过程复杂,拦截效率低,横向扩展性差;

需第三方手动实现,自定义权限认证复杂程度,部署难度大,成本高;

采用单一的权限访问拦截方法,拦截的准确性较低,无法实现精准拦截,整体作用效果较差。

因此,现有技术存在缺陷,需要改进。

发明内容

本发明的目的是克服现有技术的不足,提供一种可实现横向扩展规则的系统登录认证权限校验方法,解决现有技术中,权限认证过程复杂,部署难度大,拦截效率低等问题;同时解决拦截方法单一,拦截结果准确性低,效果差的问题。

本发明的技术方案如下:一种可实现横向扩展规则的系统登录认证权限校验方法,包括以下步骤:

API网关拦截端口请求,通过端口请求的TOKEN数据从非关系型数据库获取对应的端口请求的数据值以进行端口请求所属客户端的第一非法访问判断;并校验端口请求内UserSessionId请求字段是否为空,并从非关系型数据库中查找端口请求对应的user数据缓存,以进行端口请求所属客户端的第二非法访问判断。

系统拦截模块接收通过API网关的第二非法访问判断的端口请求,并判断端口请求内是否含有识别字段,以进行端口请求所属客户端的第三非法访问判断。

显然,API网关拦截端口请求分为两个阶段,分别进行第一非法访问判断、第二非法访问判断,可拦截端口请求中部分不符合要求的非法访问客户端。通过系统拦截模块进行第三非法访问判断后可拦截所有非法访问的客户端,保证其它合法访问客户端的正常访问,实现精准拦截。

进一步地,所述API网关拦截的端口请求为进行URL字段的自定义字符替换后的端口请求。在本发明中采用spring cloud gateway法进行端口请求的URL字段的自定义字符替换。需要说明的是,一般只有被修改过的URL才能请求到正确的接口。

进一步地,所述第一非法访问判断包括以下步骤:

S10:判断端口请求的请求路径是否属于路径白名单内的路径。该路径白名单为自定义的白名单,可根据实际使用场景需求进行调整。

S11:若不在所述路径白名单内,则获取端口请求的请求头所携带的TOKEN数据,若不包含TOKEN数据,则该端口请求为非法访问;若包含TOKEN数据,则使用TOKEN数据作为key,从非关系型数据库获取对应的端口请求的数据值。该数据值为客户端会话ID。

S12:若获取的数据值不为空,则给所述端口请求添加UserSessionId请求头字段,并进入第二非法访问判断。

进一步地,若步骤S10的判断结果为是,则给所述端口请求添加UserSessionId请求头字段,并进入第二非法访问判断。

进一步地,若步骤S11中获取的数据值为空,则判断该端口请求为非法访问。若为空,则说明非关系型数据库内无该端口请求对应的客户端的客户会话ID,该客户端的端口请求为非法访问。

进一步地,所述第二非法访问判断过程为:

S20:判断通过第一非法访问判断的端口请求的请求头的忽略字段的值是否符合预设规则。

S21:若不符合,则校验端口请求内UserSessionId请求字段是否为空,若为空,则判断为非法请求,若不为空,则从非关系型数据库中查找端口请求对应的user数据缓存,并被发送至所述系统拦截模块。

进一步地,若步骤S20中,端口请求的请求头的忽略字段的值符合预设规则,则直接被发送至所述系统拦截模块。

进一步地,所述系统拦截模块还用于接收系统内部客户端发送的端口请求。系统内部的端口请求会直接发送至系统拦截模块处,因此,系统拦截模块在接收到端口请求后,会先判断其是系统内部的端口请求还是外部的端口请求,若是系统内部的端口请求则可直接通过校验。

进一步地,所述系统拦截模块在判断端口请求内是否含有识别字段前,还包括以下步骤:

S30:判断端口请求是否为系统内部的端口请求;

S31:若是,则校验通过,若否,则进行端口请求的第三非法访问判断;

进一步地,所述第三非法访问判断的步骤为:

S40:判断端口请求内是否含有识别字段;

S41:若是,则校验通过,若否,则判断用户缓存数据是否为空;

S42:若用户缓冲数据为空,则校验通过;若用户缓冲数据不为空,则该端口请求为非法访问。经过第三非法访问后,通过校验的端口请求对应的客户端通过校验,可进行相关数据的访问并进行相应操作,保证只有相应权限的客户端才能进行相关操作,安全性更高。

采用上述方案,本发明提供一种可实现横向扩展规则的系统登录认证权限校验方法,具有以下有益效果:

经过第一非法访问判断、第二非法访问判断,可将大量非法访问的端口请求快速拦截在系统拦截模块外,保证拦截效率、准确性高;

可实现系统内的端口请求和系统外的端口请求的拦截过程的分流,有效提高系统内的端口请求的校验效率,作用效果更好;

可在API网关中自定义的添加权限校验规则,横向扩展性强,可有效提高用户体验感;

集成在spring cloud gateway中,可以简单易用,开发者不需要引入第三方,可自行根据系统量级,自定义权限认证复杂程度,有效降低部署难度,提高部署效率。

附图说明

图1为本发明的原理框图;

图2为本发明的第一非法访问判断的流程框图;

图3为本发明的第二非法访问判断的流程框图;

图4为本发明的系统拦截模块的判断过程的流程框图。

具体实施方式

以下结合附图和具体实施例,对本发明进行详细说明。

请参照图1-图4,本发明提供一种可实现横向扩展规则的系统登录认证权限校验方法,包括以下步骤:

使用spring cloud gateway(即微服务网关技术)做API网关拦截请求,处理系统外部的客户端发送的端口请求,将该端口请求中符合规则的URL字段进行自定义替换,只有被修改过的URL的端口请求才能请求到正确的API网关端口。例如端口请求中符合规则的URL字段为/dev/cszg/common/,被修改后,会被替换为/dev/sys/common/,被修改后可进入至API网关端口处。

客户端的端口请求到达API网关后,被其拦截,进行校验鉴别:

S10:API网关获取到端口请求后,拆分端口请求的数据,拿到其请求头和请求路径,并判断端口请求的请求路径是否属于路径白名单内的路径。

在本实施例中,有三个端口请求,分别为端口请求1、端口请求2、端口请求3,拆分后:

端口请求1的请求头为:

POST /dev/cszg/ent/list HTTP/1.1;

Accept-Encoding: gzip, deflate;

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6;

Connection: keep-alive;

Content-Length: 34;

Content-Type: application/json;

Host: 192.168.200.179:8080;

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60;

显然,从请求头中可看出,端口请求1的请求路径为:

端口请求2的请求头为:

POST /dev/cszg/ent/common/entTree HTTP/1.1;

Accept-Encoding: gzip, deflate;

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6;

Connection: keep-alive;

Content-Length: 0;

Host: 192.168.200.179:8080;

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60;

token: b2618e48fd4f011f2fb39b0c11787a65;

显然,从端口请求2的请求头中可看出,端口请求2的请求路径为:

端口请求3的请求头为:

POST /dev/cszg/user/list HTTP/1.1;

Accept-Encoding: gzip, deflate;

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6;

Connection: keep-alive;

Content-Length: 47;

Content-Type: application/json;

Host: 192.168.200.179:8080;

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60;

token: b2618e48fd4f011f2fb39b0c11787a65;

显然,从端口请求3的请求头中可看出,端口请求3的请求路径为:

S11:若在所述路径白名单内,则直接对该端口请求的请求头添加表示忽略字段,重构请求,并进入第二非法访问判断;若不在所述路径白名单内,则获取端口请求的请求头所携带的TOKEN数据,若请求头内不包含TOKEN数据,则该端口请求为非法访问;若包含TOKEN数据,则使用TOKEN数据作为key,从非关系型数据库获取对应的端口请求的数据值。在本实施例中,非关系型数据库为Redis数据库。若路径在白名单中,在本实施例中,对端口请求添加的忽略字段为IGNORE,且该字段设置的值为1表示忽略该请求。

在本实施例中,所述路径白名单为:

显然,本实施例中的端口请求1、端口请求2、端口请求3均不在上述白名单内,因此,均会进一步获取对应的请求头所携带的TOKEN数据,显然端口请求1的请求头内不包含TOKEN数据,因此端口请求1为非法访问,不再进行下一步判断。

端口请求2、端口请求3的请求头内携带的TOKEN数据分别为:b2618e48fd4f011f2fb39b0c11787a65、b2618e48fd4f011f2fb39b0c11787a65,显然包含TOKEN数据。判断完成后,则分别使用端口请求2、端口请求3的TOKEN数据作为key,从非关系型数据库Redis中获取对应的端口请求的数据值。

S12:数据值为空,则判断该端口请求为非法访问;若获取的数据值不为空,则给所述端口请求添加UserSessionId请求头字段,并进入第二非法访问判断。端口请求2、端口请求3内的数据值不为空,因此,可进一步给端口请求2、端口请求3添加UserSessionId请求头字段,端口请求2、端口请求3依次进入至第二非法访问判断阶段。在经过上述判断后,给端口请求2、端口请求3添加请求头忽略字段IGNORE,端口请求的IGNORE的值为1,端口请求3的IGNORE的值为1。

在通过第一非法访问判断后,可拦截部分不符合要求的非法用户,通过第一非法访问判断的客户端的端口请求则进入第二个阶段,进行第二非法访问判断。

第二非法访问判断的具体过程为:

S20:判断通过第一非法访问判断的端口请求的请求头的忽略字段的值是否符合预设规则。

S21:若端口请求的请求头的忽略字段的值符合预设规则,则直接被发送至所述系统拦截模块;若不符合,则校验端口请求内UserSessionId请求字段是否为空,若为空,则判断为非法请求,若不为空,则从非关系型数据库中查找端口请求对应的user数据缓存,并被发送至所述系统拦截模块。显然,端口请求2的请求头的忽略字段的值为1符合要求,其可直接被发送至系统拦截模块,而端口请求3的请求头的忽略字段的值为2,不符合要求,进入至下一步操作,最终判断出端口请求3对应的user数据包含所属的用户访问权限,不包含该请求试图访问的页面,因此,判定其无访问权限,属于非法访问。

在通过第二非法访问判断后,可进一步拦截部分不符合要求的非法用户,通过第二非法访问判断的客户端的端口请求则进入系统拦截模块内,进行第三非法访问判断,通过第三非法判断后才能通过最终的校验。

需要说明的是,所述系统拦截模块还用于接收系统内部客户端发送的端口请求。因此,其需要同时对系统外部客户端、系统内部客户端发送的端口请求进行判断,以进行不同权限的校验。系统内部的客户端无需进行上述第一非法访问判断、第二非法访问判断。所述系统为云平台等需要进行登陆权限认证的系统。

所述系统拦截模块进行端口请求的第三非法访问判断的具体操作过程为:

S30:判断端口请求是否为系统内部的端口请求。

S31:若是,则校验通过,若否,则进行端口请求的第三非法访问判断。

S40:判断端口请求内是否含有识别字段。

S41:若是,则校验通过,若否,则判断用户缓存数据是否为空;

S42:若用户缓冲数据为空,则校验通过;若用户缓冲数据不为空,则该端口请求为非法访问。显然,端口请求2不是系统内部的端口请求,因此,需进一步判断其内是否含有识别字段,而端口请求2内含有UserSessionId请求字段,因此校验通过。

此外,需要说明的是,端口请求为系统内部的端口请求、端口请求内是否含有识别字段的端口请求均在通过校验后,将其用户信息添加至Session缓存,而系统拦截模块内还设置有DispatcherServlet,通过其可在端口请求的操作完成后,将Session内缓存的信息清理掉,可避免用户信息不符合要求的情况。

显然,本发明中的一种可实现横向扩展规则的系统登录认证权限校验方法,可在API网关中自定义的添加权限校验规则,可根据实际需求,进行自定义权限校验,横向扩展性强,可有效提高用户体验感;此外,本发明集成在spring cloud gateway中,可以简单易用,开发者不需要引入第三方,可自行根据系统量级,自定义权限认证复杂程度,有效降低部署难度,提高部署效率。

另外,本发明中的端口请求,需要依次经过第一非法访问判断、第二非法访问判断,才能进入至系统拦截模块,即系统内部,可将大部分不符合要求的非法访问判断快速拦截在系统拦截模块外,保证拦截效率、准确性高;同时可实现系统内的端口请求和系统外的端口请求的拦截过程的分流,有效提高系统内的端口请求的校验效率,作用效果更好。

以上仅为本发明的较佳实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

技术分类

06120116523480