基于表达式的访问控制的细粒度授权

栏目: 后端 · 发布时间: 5年前

内容简介:今天,我们将回顾基于表达式的访问控制(EBAC),基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)之间的差异,并更加关注EBAC。简单地说,基于表达式的访问控制是使用表达式来编写授权。

今天,我们将回顾基于表达式的访问控制(EBAC),基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)之间的差异,并更加关注EBAC。

什么是基于表达式的访问控制?

简单地说,基于表达式的访问控制是使用表达式来编写授权。 基于表达式的访问控制 (EBAC)目前最常与使用 Spring表达式语言 表达式来编写授权相关联。

在Spring Security 3.0中,除了简单使用配置属性和访问决策之外,还引入了使用Spring EL表达式作为授权机制的能力。

然而,使用表达式进行访问控制是 不是 仅限于Spring Security,可要求更大的社区认可在授权中使用表达式作为基于表达式的访问控制(EBAC),因为它与其他形式的访问控制具有独特的不同,因为它能够让您实现其他访问控制的形式,如RBAC和ABAC

EBAC的其他示例包括 MapR中访问控制表达式(ACE)Windows中的动态访问控制 。还有其他一些,例如 PHP Framework Symfony

EBAC=ABAC?

基于表达式的访问控制(EBAC)是否等同于基于属性的访问控制(ABAC)?不,但 ABAC 可以通过EBAC实施。根据 NIST特刊800-162, 这是ABAC的高级定义:

基于主题的指定属性,对象的指定属性,环境条件以及根据这些属性和条件指定的一组策略,授予或拒绝主体对对象执行操作的请求的访问控制方法

考虑到这一点,我们可以使用表达式语言编写自己的表达式语言,例如基于Spring Expression Language的表达式,然后可以使用现有的@PreAuthorize,@ PostAuthorize,@ PreFilter和@PostFiler,sec:authorize标签调用,甚至可以通过intercept-url 条件。

EBAC=RBAC?

不,EBAC不等同于RBAC,但RBAC内置于某些表达语言,如Spring EL。例如,有这两个常见的表达式允许我们轻松实现RBAC:

  • hasRole([作用])
  • hasAnyRole([基于role1,基于role2])

但是,在编写细粒度授权规则时,我们很容易开始编写超出RBAC粒度级别的表达式。

网络安全表达式

EBAC实现(例如Spring Security)允许我们保护URL。表达式应评估为true或false,定义是否授予访问权限。基于 Java 配置中的userID限制RESTful应用程序中的访问的示例:

http
.authorizeRequests()
.antMatchers(<font>"/user/{userId}/**"</font><font>).access(</font><font>"@webSecurity.checkUserId(authentication,#userId)"</font><font>)
...
</font>

方法安全表达式

方法安全性比“允许或拒绝”更复杂。

例如,在Spring Security中,有四个注释使表达式属性执行调用前和调用后授权检查,并支持过滤提交的集合参数或返回值。

@PreAuthorize是最常用的,它决定是否可以实际调用方法。

@PostAuthorize是一种不常用的注释,在调用方法后执行访问控制检查。

使用@PostFilter,Spring Security会遍历返回的集合并删除所提供表达式为false的所有项目。

@PreFilter允许我们在方法调用之前进行过滤,但这种情况不太常用。

下面我们有一个将PreAuthorize与@PostFilter相结合的示例,以获得更细粒度的安全性:

@PreAuthorize(<font>"hasRole('USER')"</font><font>)
@PostFilter(</font><font>"hasPermission(filterObject, 'read') or hasPermission(filterObject, 'admin')"</font><font>)
<b>public</b> List<contact> getAll();
</font>

何时使用基于表达式的访问控制(EBAC)?

如果我们需要的安全性需要比简单的访问控制列表(ACL)更精细,那么我们需要使用EBAC。我们如何决定实施EBAC是我们可以获得的资源。例如,在使用Spring Security的组织中,为什么不使用他们的Spring EL?同样,如果我们有MapR,那么我们将使用他们的访问控制表达式。

在其他情况下,为了满足组织的需要,可能需要以优惠语言编写我们自己的表达语言以实现EBAC。当然,我们花时间做这件事的原因是为了让我们能够根据我们想要的条件实现我们想要的任何类型的访问控制。一旦我们有足够的表达语言来实现这一目标,另一个好处是我们不太可能依赖其他人 - 无论是商业现货产品还是开源产品。

结论

各种软件都能够使用表达式编写授权,例如MapR,Windows,当然还有Spring Security。如果可以使用表达式完成细粒度的访问控制,我将其称为 - 并建议您将其称为 - 基于表达式的访问控制(EBAC)。通过命名,我们更有可能使用它来保护我们的系统而不是传统的RBAC。这很好,因为细粒度的访问控制,如果操作得当,更有可能防止漏洞。


以上所述就是小编给大家介绍的《基于表达式的访问控制的细粒度授权》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创业头条

创业头条

[美]兰德尔•莱恩(Randall Lane)及《福布斯》杂志编辑部 / 孙莹莹 / 浙江人民出版社 / 2015-6 / 54.90

[内容简介] 全民创业的浪潮中,如何抓住共享经济带来的机遇?没有营收模式还一直烧钱的公司,如何赢得投资人的青睐?一轮死、二轮死、N轮死的魔咒下,怎样才能成功活下来?面对数十亿美元的收购要约,创始人究竟应该如何抉择?没有资金又不懂技术,是否就无法分享互联网创业的红利?《创业头条》一书将为你揭秘上述问题的答案。 阅读《创业头条》一书你会发现,在硅谷最新崛起的互联网亿万富豪身上,有这样一......一起来看看 《创业头条》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具