基于属性的访问控制模型如何实现

270 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

访问控制,就是对数据的访问限制。常见的访问控制模型有访问列表控制,强制访问控制,基于角色的访问控制,基于属性的访问控制等。

其中基于属性的访问控制是最为灵活、最为精确的。基于角色的访问控制,在面对动态化的场景,如资源是动态化的时候,我们很难界定什么样子的资源属于哪种角色,所以势必要给资源进行进一步的细分,按特征去进行控制。如果增加很多角色类型,那么也不行,角色就会变得难以维护。

在一个场景下,如团队、应用。应用属于团队,团队里有不同的角色。团队有团队管理员,应用有应用管理员。建立了应用,那么团队的管理员要变成应用的管理员。这样就很麻烦。这时候我们如果换种思路,用户与资源,不是一对一的关系,而是通过人员-属性,资源-属性的关系结合在一起,这样就会简单很多。

应用 A 是团队 A 的一个应用。所有团队 A 的成员都可以访问该应用 A 。那么访问应用 A 需要满足的条件为:

  1. 用户拥有团队 A 成员的属性
  2. 应用 A 有从属于团队 A 的属性 和 可见范围为团队属性
  3. 操作类型为访问信息

那么,我们新建应用的时候,只需要给应用加上从属于团队 A 的属性,设置下可见范围,就可以了。 新加成员的时候,我们只需要给成员加上团队A成员的属性,就可以访问应用 A 了

所有 ABAC 的实现,都可以概括为以下的流程:

  1. 认证:获取请求主体的信息
  2. 主体属性收集
  3. 资源属性收集
  4. 环境上下文
  5. 决策规则的获取
  6. 规则的执行

拿以上的应用A来说,就用到了 12356,最终决定了访问应用 A 这一动作可以执行。