基于资源的访问控制与基于角色的访问控制

15
我正在学习Apache Shiro,并发现了这篇文章:The New RBAC: Resource-Based Access Control。作者说:
“......如果您想的话,可以直接将行为(权限)分配给角色。从这个意义上说,您仍然拥有基于角色的访问控制安全策略 - 只是您会有一个明确的RBAC策略,而不是传统的隐式策略。”
“但这引出了一个问题 - 为什么要止步于角色?您可以直接将行为分配给用户,或组,或任何其他安全策略允许的对象。”
看起来作者更喜欢直接存储用户与权限之间的关系,而不是通过角色。
虽然这似乎简单明了,但我有一些问题:
  1. 它们之间有什么本质区别吗?
  2. 数据库模式。
在基于角色的访问控制中,通常我们使用三个表来描述关系:
user
role
user_role

如果我使用基于资源的访问控制,建立表格的正常做法是什么?


ABAC XACML是我所知道的最好的现有系统。 阅读这篇文章可能有助于更好地理解这个主题:http://stackoverflow.com/questions/18622678/rest-api-use-endpoint-properties-in-authorization-model/18640223#18640223 - inf3rno
更多详情请阅读此文章:https://stormpath.com/blog/new-rbac-resource-based-access-control - Eng.Fouad
1个回答

22

这是我第一次听说基于资源的访问控制。

如果涉及授权,我会极其谨慎地走上这条路。在授权领域,实际上有两种标准:

  • 基于角色的访问控制(RBAC),由 NIST 标准化,并在数千个应用程序和框架中得到实现,并得到主要供应商(CA、Oracle、IBM 等)的支持
  • 基于属性的访问控制(ABAC)由NIST(也在此处)标准化,并得到 IBM、Oracle 和 Axiomatics 等供应商的同等良好实现,而我在 Axiomatics 工作。

基于资源的访问控制似乎是由 Stormpath 发明的模型,仅受其支持。它可能很好,但只能在其环境中运行。

基于角色和属性的访问控制是被 NIST 和其他标准化机构如 OASIS 所接受的范例,并得到 SAML 和 XACML 等标准的支持(这些标准是 10 年前定义的,现在仍然得到支持)。

我的问题是:为什么基于角色的访问控制对你来说不够?你是否面临角色泛滥的问题?它是否表达不清楚?你是否需要在用户、资源和上下文之间实现关系?

ABAC 和 XACML 可以让您做到这一点。我之前在 YouTube 上发布了一个简单的视频,介绍了基于属性的访问控制,请观看

总之,RBAC 和 ABAC 是跨多个应用程序和层的标准。基于资源的访问控制仅适用于 Apache Shiro。


当参数在路由中发生变化时,这个功能是如何工作的?直到我们处理请求之前,我们可能不知道是否可以访问该资源,对吗? - Josh C.
在这种情况下,什么被认为是最佳实践? - Josh C.
@DavidBrossard,请问如何获取 Axiomatic APS XACML 试用版?您提供的链接 (http://www.axiomatics.com/get-aps-express-edition-now.html) 并未给我发送任何确认电子邮件。谢谢。 - Rashmi Pandit
请发送电子邮件至info@axiomatics.com,他们应该能够帮助您。 - David Brossard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接