基于表达式的访问控制
1.概述
今天,我们将回顾基于表达式的访问控制(EBAC),基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)之间的区别,并将重点放在EBAC上。
2.什么是基于表达式的访问控制?
简而言之,基于表达式的访问控制是使用表达式来编写授权。
短语基于表达式的访问控制 (EBAC)当前最常与使用Spring Expression Language表达式来编写授权相关联。
在Spring Security 3.0中,引入了使用Spring EL表达式作为授权机制的能力,除了简单使用配置属性和访问决策投票者之外。
但是,使用表达式的访问控制并不仅仅局限于Spring安全! 这篇博客文章部分是要求更大的社区认可将授权中的表达式用作基于表达式的访问控制(EBAC),因为它与其他形式的访问控制有独特的不同,因为它可以让您实现其他功能访问控制的形式,例如RBAC和ABAC。
EBAC的其他示例包括MapR中的访问控制表达式(ACE)和Windows中的动态访问控制 。 也可能还有其他,例如PHP Framework Symfony 。
基于表达式的访问控制(EBAC)是否等同于基于属性的访问控制(ABAC)?
不可以,但是ABAC可以与EBAC一起实施。
根据NIST特别出版物800-162,这是ABAC的高级定义:
一种访问控制方法,其中,根据主题的分配属性,对象的分配属性,环境条件以及根据这些属性和条件指定的一组策略,授予或拒绝对象对对象执行操作的请求
考虑到这一点,我们可以使用一种表达式语言(例如基于Spring Expression Language的表达式)编写自己的表达式,然后可以使用现有的@PreAuthorize , @PostAuthorize , @PreFilter和@PostFiler , sec:authorize标签甚至从拦截中进行调用-url条件。
基于表达式的访问控制(EBAC)是否等效于基于角色的访问控制(RBAC)?
不,EBAC不等同于RBAC,但是RBAC内置于某些表达语言中,例如Spring EL。 例如,以下两个常用表达式使我们能够轻松实现RBAC:
- hasRole([角色])
- hasAnyRole([role1,role2])
但是,在编写细粒度的授权规则时,我们很容易开始编写超出RBAC粒度级别的表达式。
3. Web安全表达式
EBAC实现(例如Spring Security)使我们能够保护URL。 表达式应评估为true或false,定义是否授予访问权限。 在Java配置中基于userID限制RESTful应用程序中访问的示例:
http
.authorizeRequests()
.antMatchers("/user/{userId}/**").access("@webSecurity.checkUserId(authentication,#userId)")
...
4.方法安全性表达式
方法的安全性比允许或拒绝要复杂得多。
例如,在Spring Security中,有四个注释具有表达式属性,以执行调用前和调用后的授权检查,还支持过滤提交的集合参数或返回值。
最常用的@PreAuthorize决定是否可以实际调用方法。
@PostAuthorize (一种不常用的注释)在调用方法后执行访问控制检查。
使用@PostFilter ,Spring Security遍历返回的集合并删除提供的表达式为false的所有项目。
@PreFilter允许我们在方法调用之前进行过滤,但这并不常用。
下面是一个将PreAuthorize与@PostFilter结合使用以实现更细粒度安全性的示例:
@PreAuthorize("hasRole('USER')")
@PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, 'admin')")
public List<contact> getAll();
5.何时使用基于表达式的访问控制(EBAC)?
如果我们需要的安全性比简单的访问控制列表(ACL)需要更多的粒度,则我们需要使用EBAC。 我们如何决定实施EBAC取决于我们拥有什么资源。 例如,在使用Spring Security的组织中,为什么不使用其Spring EL? 同样,如果我们拥有MapR,那么我们将使用其访问控制表达式。
在其他情况下,为了满足组织的需求,可能需要以偏爱的语言编写我们自己的表达语言,以实施EBAC。 我们之所以花时间来这样做,当然是为了使我们能够在所需条件下实现所需的访问控制。 一旦我们拥有足够的表达语言来完成此任务,另一个好处就是,我们不太可能依赖他人-无论是现成的商品还是开源的。
六,结论
各种软件都具有使用表达式编写授权的能力,例如MapR,Windows,当然还有Spring Security。 如果可以使用表达式来实现细粒度的访问控制,那么我将其称为-基于表达式的访问控制(EBAC),并建议您将其引用。 通过给它起一个名字,我们更有可能使用它来保护我们的系统,而不是传统的RBAC。 这样做很好,因为细粒度的访问控制(如果正确完成)更有可能防止违反行为。
翻译自: https://www.javacodegeeks.com/2019/01/expression-based-access-control.html
基于表达式的访问控制相关推荐
- ssrs 基于表达式显示_基于表达式的访问控制
ssrs 基于表达式显示 1.概述 今天,我们将回顾基于表达式的访问控制(EBAC),基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)之间的区别,并将重点放在EBAC上. 2.什么是基于 ...
- Context-Based Access Control (CBAC) 基于上下文的访问控制 理论知识
CBAC即基于上下文的访问控制协议,通过检查防火墙的流量来发现管理TCP和UDP的会话状态信息.这些状态信息被用来在防火墙访问列表创建临时通道.通过在流量一个方向上配置ip inspect列表,放行其 ...
- 基于角色的访问控制(RBAC)
来自:编程新说 很多时候,需要对一些事物进行控制,如一个房间,为了不让人随便进,通常会装一把锁,如果要想进入,你必须得有一把钥匙,且还得和这个锁匹配才行. 基于此做一个抽象,其实包含三方面内容: 1) ...
- R语言with函数和within函数:with函数基于表达式在dataframe上计算、within函数基于表达式在dataframe上计算并修改原始数据
R语言with函数和within函数:with函数基于表达式在dataframe上计算.within函数基于表达式在dataframe上计算并修改原始数据 目录
- 15 -Flask构建弹幕微电影网站-基于角色的访问控制
本章内容: 基于角色的访问控制 已上线演示地址: http://movie.mtianyan.cn 项目源码地址:https://github.com/mtianyan/movie_project 基 ...
- 针对访问控制列表ACL 与 基于角色的访问控制RBAC进行简单介绍
2019独角兽企业重金招聘Python工程师标准>>> 访问控制列表(Access Control List,ACL) ACL是最早也是最基本的一种访问控制机制,它的原理非常简单:每 ...
- http基于用户的访问控制--实战
在http基于域名的虚拟主机的实现博文中有配置jd首页,这篇博文就实现,在访问jd首页的时候需要输入账号密码才能访问.本片博文是博文apache配置文件httpd.conf----小白福利中配置18: ...
- RHEL6.3配置Apache服务器(4) 基于用户的访问控制
在上篇博文中介绍了基于客户端地址的访问控制,这种方法设置起来相对比较简单,但是不具备太大的实用价值.在实际应用中,我们大都是希望通过对用户进行身份验证从而来进行访问控制,在这篇博文中将主要介绍这种基于 ...
- 方法级权限控制-基于表达式操作
Spring Security允许我们在定义URL访问或方法访问所应有的权限时使用Spring EL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的权限,反之则无.Sp ...
最新文章
- Import error: no module named cv2 错误解决方法
- 欧拉回路【洛谷习题】无序字母对
- Zookeeper应用场景理解
- oracle 用户创建角色,oracle普通用户创建和加权限
- 转:求多边形的面积 算法几何
- Freemarker模板引擎
- Requests库实战(二)---破解百度翻译
- linux进程和线程教程,Linux下查看进程和线程
- a=a++问题引发的思考
- word模板Normal.dotm文件的生成与替换
- 远程服务RMI源码解析(二)
- 计算机软件实习每日学习打卡(2)20201203
- 动物拼图代码html,制作动物拼图美术教案
- keras 入门教程(一)
- QWebEngineView右键菜单翻译
- 电子信息专业见习报告
- java申请暨资格审查表_毕业论文答辩申请暨资格审查表刘金花
- 计算机软件毕业论文教师指导记录,毕业论文教师指导记录表范文_毕业论文指导记录表范文 pdf文库_论文指导记录表填写范文100篇...
- 教你三相永磁同步电机隆博戈观测matlab搭建
- git常用操作--分支