应用层安全架构设计-访问控制

权限控制,或者说访问控制,普遍应用于各个系统中。抽象地说,是某个主体(subject)对某个客体(object)须要实施某种操做(operation),而系统对这种操做的限制就是权限控制。前端

在网络中,为了保护网络资源的安全,通常是经过路由设备或者防火墙创建基于IP和端口的访问控制。java

在操做系统中,对文件的访问也要访问控制。好比在Linux系统中,一个文件能够执行的操做分为“读”、“写”、“执行”三种,这三种操做同时对应着三种主体:文件拥有者、文件拥有者所在的用户组、其余用户,主体、客体、操做这个三者之间的对应关系,构成了访问控制列表。程序员

在Web应用中,根据访问客体的不一样,常见的访问控制能够经过解决如下几个目标问题来实现:web

  • 他是谁?
  • 他只能访问给他授予了权限的接口!
  • 他不能查看别人的数据!

下面咱们之前后端分离的项目为例,解释如何解决这几个目标问题:后端

他是谁?

在先后端分离项目中,前端用户登陆后后端服务会给其颁发一个token,好比咱们所熟知的JWT(JSON Web Token),然后每次前端请求后端接口都会带上这个token。因为JWT上会带有用户信息,此时咱们要作的就是校验这个token对应的用户是否为系统合法用户。安全

他只能访问给他授予了权限的接口!

光知道他是系统的合法用户仍是不够,web应用还得保证当前用户只能访问他拥有权限的接口。服务器

好比有个薪资查询的接口,业务上只容许部门领导角色访问。若是系统不作控制,张三知道了薪资查询接口,就拿着本身的token去调用此接口而后就能知道全部员工的薪资了,这种问题咱们称之为"越权访问"。微信

处理这个问题如今应用普遍的一种方法就是“基于角色的访问控制(RBAC:Role-Based Access Control)”,也称“垂直权限管理”。网络

RBAC事先会在系统中定义出不一样的角色,不一样的角色拥有不一样的权限,一个角色实际上就是一个权限的集合。而系统的全部用户都会被分配到不一样的角色中,一个用户可能拥有多个角色。架构

当用户带着token请求后端服务时,咱们还得经过token查询出当前用户所属的角色,而后根据角色查询出用户拥有的全部权限。权限框架 Spring Security 和  Shiro都很好的支持RBAC控制。

他不能查看别人的数据!

张三和李四都是部门领导,他们均可以查询员工薪资的权限。可是他们都只被容许查看本身部门员工的薪资。张三知道了接口调用规则,就能够经过修改调用参数获取李四部门员工的薪资了,这种状况固然也是不被容许的。

在RBAC模型下,系统只会验证用户A是否属于角色RoleX,而不会判断用户A是否能访问只属于用户B的数据DataB,所以发生了越权访问。这种问题咱们称之为“水平权限管理问题”。

如今数据级权限管理并无很通用的解决方案,通常是具体问题具体解决。

简单的作法是给接口请求加上秘钥,经过接口参数+当前系统登陆人一块儿进行加密发送给后端服务,后端接受到请求后对加密内容进行解密,根据约定的规则解析出用户信息并与登陆用户进行匹配,匹配上正常访问,匹配不上则拒绝访问。




以上,但愿对你有所帮助!



End




干货分享



这里为你们准备了一份小小的礼物,关注公众号,输入以下代码,便可得到百度网盘地址,无套路领取!

001:《程序员必读书籍》
002:《从无到有搭建中小型互联网公司后台服务架构与运维架构》
003:《互联网企业高并发解决方案》
004:《互联网架构教学视频》
006:《SpringBoot实现点餐系统》
007:《SpringSecurity实战视频》
008:《Hadoop实战教学视频》
009:《腾讯2019Techo开发者大会PPT》

010: 微信交流群






近期热文top



一、关于JWT Token 自动续期的解决方案

二、SpringBoot开发秘籍-事件异步处理

三、架构师之路-服务器硬件扫盲

四、基于Prometheus和Grafana的监控平台 - 环境搭建

五、RocketMQ进阶 - 事务消息



我就知道你“在看”





本文分享自微信公众号 - JAVA日知录(javadaily)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索