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

一种HTTP请求细粒度的字段权限管理方法及系统

文献发布时间:2024-04-18 19:58:30


一种HTTP请求细粒度的字段权限管理方法及系统

技术领域

本发明涉及权限安全管理技术领域,特别是一种HTTP请求细粒度的字段权限管理方法及系统。

背景技术

常见的接口管理系统在权限管理方面通常仅限定到URL地址级别,而对于同一URL地址中不同参数权限的管理存在缺失。当前技术背景存储系统侵入性强,为了实现参数级别的权限管理,需要对接口地址和参数进行调整和修改,这增加了系统的复杂性和开发工作量;重复开发和维护,针对不同的参数权限需求,需要重复开发和维护类似的接口,这导致代码冗余和不易维护;管理复杂性:随着参数权限的增加,需要配置大量对应的权限管理记录,增加了管理的复杂性和出错的可能性,扩展性受限。

当系统需要新增或修改参数级别的权限管理时,需要调整接口地址和参数,这对于已有的客户端和第三方集成造成了兼容性问题。

发明内容

为克服现有技术中多参数字段权限控制效率低,不易于维护,扩展性低的问题,本发明的目的是提供一种HTTP请求细粒度的字段权限管理方法及系统,能够满足细粒度的字段权限管理,实现多参数字段的权限控制,扩展性高。

本发明采用以下方案实现:

一种HTTP请求细粒度的字段权限管理方法,所述方法步骤如下:

步骤1:用户配置权限数据和请求参数,所述权限数据包括用户名、密钥、接口地址和参数权限规则,所述参数权限规则配置格式为“字段名=字段值”,如果需要验证的参数是在嵌套结构内的则需要指明父级,并且每个字段之间用逗号分隔;

步骤2:获取签名A,设置请求头,并向接口发送请求;

步骤3:接口按预设时间间隔读取权限数据,并将所述权限数据存入内存中,当接口收到请求后,根据请求头查找相应的权限数据,若查不到,则返回无权限;反之,则进入步骤4;

步骤4:根据查找到的权限数据获取签名B,将签名A与签名B进行比对,若签名不一致,则返回签名错误;若签名一致,则进入步骤5;

步骤5:首先将请求参数中的字段名作为key键,字段值作为value值,把请求参数转换为字典map结构,再根据逗号的位置将步骤1中参数权限规则进行切割,得到一个规则数组,如果规则数组中某个元素不包含“.”,则表示“=”左边是字段名,“=”右边是字段值,则从字典map结构中读取与元素字段名相同的key键,将所述key键对应的value值与规则数组中对应的元素进行比较;如果规则数组中某个元素包含“.”,则表示是嵌套结构,先从所述字典map结构中读取嵌套结构中父级的结构,再将父级的结构转化为子字典map结构,从子字典map结构中读取子结构的值,将子结构的值与规则数组中对应的元素比较;

如果存在不一致则提示参数没权限,如果全都一致则表示有结构权限。

进一步的,签名A和签名B通过签名计算得到,所述签名计算为请求参数+密钥进行MD5加密。

进一步的,步骤2进一步具体为:用户根据密钥和请求参数进行签名计算,获取签名A,根据用户名和签名设置请求头,带着请求头和请求参数向接口发送请求。

进一步的,步骤3进一步具体为:接口按10分钟间隔读取权限数据,当接口收到请求后,获取请求头中的用户名和签名,根据用户名查找相应的权限数据。

进一步的,步骤4进一步具体为:从查找到的权限数据中获取密钥和参数权限规则,密钥与请求参数进行签名计算,获取签名B。

一种HTTP请求细粒度的字段权限管理系统,所述系统包括:配置模块、请求模块、权限管理模块A、权限管理模块B、权限管理模块C;

所述配置模块用于用户配置权限数据和请求参数,所述权限数据包括用户名、密钥、接口地址和参数权限规则,所述参数权限规则配置格式为“字段名=字段值”,如果需要验证的参数是在嵌套结构内的则需要指明父级,并且每个字段之间用逗号分隔;

所述请求模块用于获取签名A,设置请求头,并向接口发送请求;

所述权限管理模块A用于接口按预设时间间隔读取权限数据,并将所述权限数据存入内存中,当接口收到请求后,根据请求头查找相应的权限数据,若查不到,则返回无权限;反之,则执行权限管理模块B;

所述权限管理模块B用于根据查找到的权限数据获取签名B,将签名A与签名B进行比对,若签名不一致,则返回签名错误;若签名一致,则执行权限管理模块C;

所述权限管理模块C用于首先将请求参数中的字段名作为key键,字段值作为value值,把请求参数转换为字典map结构,再根据逗号的位置将配置模块中参数权限规则进行切割,得到一个规则数组,如果规则数组中某个元素不包含“.”,则表示“=”左边是字段名,“=”右边是字段值,则从字典map结构中读取与元素字段名相同的key键,将所述key键对应的value值与规则数组中对应的元素进行比较;如果规则数组中某个元素包含“.”,则表示是嵌套结构,先从所述字典map结构中读取嵌套结构中父级的结构,再将父级的结构转化为子字典map结构,从子字典map结构中读取子结构的值,将子结构的值与规则数组中对应的元素比较;

如果存在不一致则提示参数没权限,如果全都一致则表示有结构权限。

进一步的,签名A和签名B通过签名计算得到,所述签名计算为请求参数+密钥进行MD5加密。

进一步的,请求模块进一步具体为:用户根据密钥和请求参数进行签名计算,获取签名A,根据用户名和签名设置请求头,带着请求头和请求参数向接口发送请求。

进一步的,权限管理模块A进一步具体为:接口按10分钟间隔读取权限数据,当接口收到请求后,获取请求头中的用户名和签名,根据用户名查找相应的权限数据。

进一步的,权限模块B进一步具体为:从查找到的权限数据中获取密钥和参数权限规则,密钥与请求参数进行签名计算,获取签名B。

本发明的有益效果在于:

本发明提供一种HTTP请求细粒度的字段权限管理方法及系统,能够满足细粒度的字段权限管理,实现多参数字段的权限控制,扩展性高。

附图说明

图1为本发明方法的流程图;

图2为本发明系统的结构框图。

具体实施方式

下面结合附图对本发明做进一步说明。

参见图1,一种HTTP请求细粒度的字段权限管理方法,所述方法步骤如下:

步骤1:用户配置权限数据和请求参数,所述权限数据包括用户名、密钥、接口地址和参数权限规则,所述参数权限规则配置格式为“字段名=字段值”,如果需要验证的参数是在嵌套结构内的则需要指明父级,并且每个字段之间用逗号分隔;

步骤2:获取签名A,设置请求头,并向接口发送请求;

步骤3:接口按预设时间间隔读取权限数据,并将所述权限数据存入内存中,当接口收到请求后,根据请求头查找相应的权限数据,若查不到,则返回无权限;反之,则进入步骤4;

步骤4:根据查找到的权限数据获取签名B,将签名A与签名B进行比对,若签名不一致,则返回签名错误;若签名一致,则进入步骤5;

步骤5:首先将请求参数中的字段名作为key键,字段值作为value值,把请求参数转换为字典map结构,再根据逗号的位置将步骤1中参数权限规则进行切割,得到一个规则数组,如果规则数组中某个元素不包含“.”,则表示“=”左边是字段名,“=”右边是字段值,则从字典map结构中读取与元素字段名相同的key键,将所述key键对应的value值与规则数组中对应的元素进行比较;如果规则数组中某个元素包含“.”,则表示是嵌套结构,先从所述字典map结构中读取嵌套结构中父级的结构,再将父级的结构转化为子字典map结构,从子字典map结构中读取子结构的值,将子结构的值与规则数组中对应的元素比较;

如果存在不一致则提示参数没权限,如果全都一致则表示有结构权限。

嵌套结构{A:1,B:{C:2}},比如这样一个json结构,需要验证C=2,这个嵌套结构内的,则需要指明父级,即B.C=2。

请求参数转换为字典map结构的方式参见下例:

例如{A:1,B:3}这个请求体body,则转换为字典map结构后可以通过map[A]=1和map[B]=3获取字段的值。

下面结合一个具体实施例来对本发明进行进一步说明:

一种HTTP请求细粒度的字段权限管理方法,所述方法包括如下步骤:

步骤1、配置权限管理记录,包括用户{username}、密钥{key}、接口地址{url}、参数权限规则{paramrule},其中参数权限规则配置格式为"field1=参数值1,parentfield.field2=参数值2",含义是字段名=字段值,如果是嵌套的结构则需要指明父亲,并且用逗号分隔。

假设现在有一个用于删除区域商品的接口URL地址为/goods/del,请求类型为POST,其body参数为{"city":"北京","time":"2023-08-26","goods":{"cid":1001,"tag":"测试"}},即包含3个字段city代表城市,time代表删除哪一天的数据,goods是一个子结构体,代表商品信息,包含商品类别cid和商品标签tag。有2个用户均可以访问这个接口,但用户A可以删除北京的所有数据,用户B可以删除上海且商品标签为测试的数据。那么配置权限管理记录如下:

步骤2、用户使用密钥对请求参数进行签名计算,并将用户名和签名放入请求头。随后带着请求头和请求参数向接口发送请求。

假设用户B需要请求商品数据清除接口,用户名=B,密钥=ABCDEFG,URL=https://api.xxx.com/goods/del,请求参数body为{"city":"上海","time":"2023-08-26","goods":{"cid":2001,"tag":"测试"}}。签名的计算规则为(请求参数body+密钥key)MD5,计算得到签名sign=e27b67417f87ff46b5a5b8f5c7db1809,组织请求头header,header["x-user"]=B,header["x-sign"]=e27b67417f87ff46b5a5b8f5c7db1809。随后带着请求头和请求参数向接口发送请求。

步骤3、接口系统每隔10分钟从配置中心读取权限配置数据,以用户名加地址为键,记录数据为值,将权限配置数据存入内存字典中。如B_/goods/del:权限记录数据。

当接口收到请求后,从请求头header["x-user"]和header["x-sign"]获取用户名和签名。拼接当前接口的URL得到键=B_/goods/del,然后在内存字典中查找是否有权限配置记录。若记录不存在,返回无权限的错误提示。

步骤4、如果权限管理记录存在,从中获取密钥{key}和参数权限规则{paramrule}。接下来,使用密钥对请求参数进行签名计算,并将得到的签名与请求头中的签名进行比对。若签名不一致,返回签名错误的提示。

如果权限管理记录存在,则得到密钥key,使用密钥key对请求参数进行签名计算,拼接密钥key和请求参数body然后进行MD5计算得到sign签名,如果sign签名与header["x-sign"]不一致,则返回签名错误提示。

步骤5、若签名一致,则根据参数权限规则{paramrule}与请求参数body中解析参数的值进行比较,首先把请求参数body转换为字典map结构,其次用分隔符','切割参数权限规则{paramrule}得到一个规则数组,循环数组处理单个元素,如元素A“field1=参数值1”不包含“.”则“=”左边是字段名,右边是字段值记为v1,从字典map结构中读取字段名的值记为v2,如果v1不等于v2则返回参数没权限,如果一致则处理下一个元素。如元素B“parentfield.field2=参数值2”包含“.”则表示是嵌套结构,先从map中读取parentfield的结构,再转化为子字典map结构,从子字典map结构中读取field2的值,和规则数组中的参数值2比较,如果不一致则提示参数没权限。直到循环结束,则表示有结构权限。

若签名一致则继续判断参数权限规则和请求参数body中的参数是否匹配。首先把body转换为字典map结构。根据得到的参数权限规则paramrule="city=上海,goods.tag=测试",用分隔符','切割paramrule得到一个规则数组=["city=上海","goods.tag=测试"],循环数组处理单个规则。

第一个元素="city=上海",由于不包含'.',则'='左边是字段名,右边是字段值记为v1,从字典map结构中读取字段名city的值得到上海记为v2,map获取的值v2和规则数组中v1比较,如果不一致则返回参数没权限,如果一致则处理下一个规则。

第二个元素="goods.tag=测试",由于包含'.'则表示是嵌套结构,先从字典map结构中读取goods的结构得到{"cid":2001,"tag":"测试"},再转化为子字典map结构,从子字典map结构中读取tag的值=测试,和规则数组的参数值比较,如果不一致则提示参数没权限。直到循环结束,则表示有结构权限。

参见图2,一种HTTP请求细粒度的字段权限管理系统,所述系统包括:配置模块、请求模块、权限管理模块A、权限管理模块B、权限管理模块C;

所述配置模块用于用户配置权限数据和请求参数,所述权限数据包括用户名、密钥、接口地址和参数权限规则,所述参数权限规则配置格式为“字段名=字段值”,如果需要验证的参数是在嵌套结构内的则需要指明父级,并且每个字段之间用逗号分隔;

所述请求模块用于获取签名A,设置请求头,并向接口发送请求;

所述权限管理模块A用于接口按预设时间间隔读取权限数据,并将所述权限数据存入内存中,当接口收到请求后,根据请求头查找相应的权限数据,若查不到,则返回无权限;反之,则执行权限管理模块B;

所述权限管理模块B用于根据查找到的权限数据获取签名B,将签名A与签名B进行比对,若签名不一致,则返回签名错误;若签名一致,则执行权限管理模块C;

所述权限管理模块C用于首先将请求参数中的字段名作为key键,字段值作为value值,把请求参数转换为字典map结构,再根据逗号的位置将配置模块中参数权限规则进行切割,得到一个规则数组,如果规则数组中某个元素不包含“.”,则表示“=”左边是字段名,“=”右边是字段值,则从字典map结构中读取与元素字段名相同的key键,将所述key键对应的value值与规则数组中对应的元素进行比较;如果规则数组中某个元素包含“.”,则表示是嵌套结构,先从所述字典map结构中读取嵌套结构中父级的结构,再将父级的结构转化为子字典map结构,从子字典map结构中读取子结构的值,将子结构的值与规则数组中对应的元素比较;

如果存在不一致则提示参数没权限,如果全都一致则表示有结构权限。

在本发明实施例中,签名A和签名B通过签名计算得到,所述签名计算为请求参数+密钥进行MD5加密。

在本发明实施例中,用户根据密钥和请求参数进行签名计算,获取签名A,根据用户名和签名设置请求头,带着请求头和请求参数向接口发送请求。

在本发明实施例中,权限管理模块A进一步具体为:接口按10分钟间隔读取权限数据,但不限于此,时间间隔可根据实际情况进行调节,当接口收到请求后,获取请求头中的用户名和签名,根据用户名查找相应的权限数据。

在本发明实施例中,权限模块B进一步具体为:从查找到的权限数据中获取密钥和参数权限规则,密钥与请求参数进行签名计算,获取签名B。

例如,考虑一个用于删除区域商品的接口URL地址为/goods/del,其POST参数为{"city":"北京","time":"2023-08-26"}。假设用户A和用户B都有访问/goods/del的权限,那么我们可以配置两条权限管理记录A:/goods/del和B:/goods/del来实现。然而,如果用户A只能删除北京的商品数据,用户B只能删除上海的商品数据,常见的接口管理系统可能需要通过程序实现两个不同的接口地址,例如/goods/del/北京、/goods/del/上海,然后POST参数仅为{"time":"2023-08-26"},再通过配置两条权限管理记录A:/goods/del/北京和B:/goods/del/上海来实现权限控制。从这个例子可以看出,当前技术背景存储系统侵入性强:为了实现参数级别的权限管理,需要对接口地址和参数进行调整和修改,这增加了系统的复杂性和开发工作量;重复开发和维护。

而本发明提供一种HTTP请求细粒度的字段权限管理方法及系统,能够满足细粒度的字段权限管理,实现多参数字段的权限控制,扩展性高。

以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

相关技术
  • 一种文件系统的文件权限管理方法、系统及相关装置
  • 一种移动应用SDK的权限控制管理方法及管理系统
  • 一种快速权限接入管理方法及系统
  • 一种电商平台权限管理方法及系统
  • 面向安卓广告库的细粒度权限管理方法及系统
  • 面向安卓广告库的细粒度权限管理方法及系统
技术分类

06120116503991