权限系统设计(3):ABAC基于属性的权限验证
Author:zhoulujun Date:
基于属性的权限验证
基于属性的权限验证(ABAC: Attribute-Based Access Control)
ABAC被一些人称为是权限系统设计的未来。
不同于常见的将用户通过某种方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。
例如规则:“允许所有班主任在上课时间自由进出校门”这条规则,其中,“班主任”是用户的角色属性,“上课时间”是环境属性,“进出”是操作属性,而“校门”就是对象属性了。为了实现便捷的规则设置和规则判断执行,ABAC通常有配置文件(XML、YAML等)或DSL配合规则解析引擎使用。XACML(eXtensible Access Control Markup Language)是ABAC的一个实现,但是该设计过于复杂,我还没有完全理解,故不做介绍。
总结一下,ABAC有如下特点:
集中化管理
可以按需实现不同颗粒度的权限控制
不需要预定义判断逻辑,减轻了权限系统的维护成本,特别是在需求经常变化的系统中
定义权限时,不能直观看出用户和对象间的关系
规则如果稍微复杂一点,或者设计混乱,会给管理者维护和追查带来麻烦
权限判断需要实时执行,规则过多会导致性能问题
既然ABAC这么好,那最流行的为什么还是RBAC呢?
我认为主要还是因为大部分系统对权限控制并没有过多的需求,而且ABAC的管理相对来说太复杂了。Kubernetes便因为ABAC太难用,在1.8版本里引入了RBAC的方案。
ABAC有时也被称为PBAC(Policy-Based Access Control)或CBAC(Claims-Based Access Control)。
作者:该叶无法找到
链接:https://www.jianshu.com/p/ce0944b4a903
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
转载本站文章《权限系统设计(3):ABAC基于属性的权限验证》,
请注明出处:https://www.zhoulujun.cn/html/Operation/PM/2020_0510_8426.html