3

对于具有高度复杂访问控制规则的 Web 应用程序,您是否总是使用 ACL?

在确定我的用户权限时,我有很多考虑因素,包括:

  • 他们登录了吗?
  • 他们是管理员还是普通用户?
  • 他们是否在浏览图中的节点?
  • 他们正在浏览什么类型的节点?
  • 它们与节点的关系是什么(即到节点的路径)?
  • 用户的默认设置是什么?
  • 节点的默认设置是什么?
  • 将用户连接到节点的图边的设置是什么?
  • ETC

事实证明,开发 ACL 很困难。过了一会儿,我求助于对每个动作顶部的基本属性进行“if/then”检查,例如if(isAdmin) {...}

这似乎工作正常,我想知道是否应该将其作为永久解决方案保留。因此,问题是:访问控制的复杂性是否会超过 ACL?还是只是我需要更加努力一点?

4

2 回答 2

7

当您的访问控制模型变得过于复杂时,因为访问不再仅仅基于用户的身份,您希望转移到另一个访问控制模型。

您可以使用基于角色的访问控制 (RBAC),其中将权限分组为角色,并将角色分配给用户。Active Directory 和其他 LDAP 产品允许您进行基于角色的访问控制。

但是如果你想实现的不仅仅是角色,特别是你想考虑关系、图和图边,你想使用基于属性的访问控制 (ABAC)。在基于属性的访问控制中,您可以实现考虑用户属性(他们的角色、部门、位置、年龄、公民身份……)以及资源属性(节点在图中的位置、边缘……)的授权逻辑。 .) 以及节点和用户之间的关系。

我在 ABAC 上上传了一个视频:www.youtube.com/watch?v=xUEbBKnxWSo CERIAS 也有一些很棒的视频:www.youtube.com/watch?v=3ZCoupGHmwo

今天实现 ABAC 的主要标准是 XACML,即可扩展访问控制标记语言。我会研究 XACML(免责声明 - 我为 XACML 供应商 Axiomatics 工作)。

您可以查看供应商和开源 XACML 实现。

使用 XACML,您最终会得到一个 if (isAuthorized()) 语句,而不是一堆 if(isAdmin) 和 if(validCitizen) 语句。实际的授权逻辑集中在以 XACML 表示的策略中。这也称为外部授权。

于 2013-03-20T14:46:25.137 回答
1

首字母缩写词 ACL 代表访问控制列表。因此,根据定义 - 一旦您根据用户的身份或所属的组控制用户可以访问哪些用户,您就拥有了一个 ACL。

所以对第一个问题的简短回答是,是的,您总是使用 ACL。

至于其他问题,我对他们两个都说是

ACL 可能会变得比它所控制的应用程序所需要的更复杂——例如,如果您希望对用户可以做什么进行精细控制。因此,如果您认为它变得复杂 - 看看您是否不能通过将一些 ACO 组合在一起甚至删除它们(并允许所有用户访问它们)来“简化它”。

于 2013-03-19T21:19:00.063 回答