我正在研究构建一个系统的选项,以在基于微服务的架构中提供“实体访问控制”,以根据请求用户限制对某些数据的访问。已经实施了完整的基于角色的访问控制 (RBAC) 系统来限制某些操作(基于 API 端点),但是没有实施任何措施来限制针对一个数据实体的这些操作而不是另一个数据实体。因此需要基于属性的访问控制 (ABAC) 系统。
考虑到系统要求适合用途以及我自己的优先事项,以遵循安全逻辑实现的最佳实践以保持在一个位置,我设计创建了一个外部化的“实体访问控制”API。
我设计的最终结果类似于我看到的下图(我认为来自 axiomatics.com)

问题在于,当您开始谈论以结果列表作为响应的 API 的那一刻,整个事情就失败了。
例如。客户 API 上的 /api/customers 端点,它接受查询过滤器、排序、顺序和限制/偏移值等参数以促进分页,并将客户列表返回到前端。那么,您如何在微服务环境中为每个实体提供 ABAC?
到目前为止测试的上述问题的可怕解决方案:
注意:我测试了 14,000 条记录,因为它是我们当前数据状态的基准。一个 API 可以服务 100,000 或 1m 条记录是完全可行的,因此任何涉及迭代整个数据集或通过网络传输整个数据集的事情都是完全不可持续的。
那么,问题就在这里......你如何在微服务架构中实现一个外部化的 ABAC 系统(如图所示),同时还能够通过查询过滤器、排序、排序和限制来处理响应多个实体的请求/offset 值以方便分页。
我们有一个中等规模的商业应用程序,我们大量使用Spring Security角色和权限(RBAC)来为某些实例打开和关闭角色以及隐藏在@PreAuthorize标记内的SpEL中的规则.
我认为我们实际实施了什么(不知道它是ABAC).XACML看起来非常复杂和臃肿,所以我不喜欢这里的答案:
有没有人在没有XACML的情况下完成了轻量级的ABAC实施?我希望能够让我们分离关注点,因为域对象只是做@PreAuthorize(WRITE)等,我们的授权策略将与它分离.
从我读过的内容来看,ABAC的基本原理非常简单.您有一个Action(非常像Permission)和一种机制来解决当前Principal是否具有给定Subject的权限.
我知道AccessDecisionVoter大致是正确的接口类型,但我不认为它是用于对权限进行投票.然而,实施我们的授权政策与这样的事件似乎非常有吸引力.
抱歉这个漫无边际的问题!基本上我对ABAC很感兴趣,但我想避免家酿,但担心当我们需要Cessna时XACML是一架大型喷气式飞机.
我有一个项目需要 ABAC 对我的项目资源进行访问控制。我一直在研究 OPA 和 authzforce 作为实现 ABAC 的选项,而 OPA 看起来可能没有 authzforce 复杂。我看到 OPA 将自己与其他系统和范式进行了比较,但它为 ABAC 提供的示例还有很多不足之处。主要是因为 ABAC 需要使用点来执行策略、围绕策略做出决策、为策略决策获取主体和客体属性。我觉得 OPA 拥有除最后一部分之外的所有内容,但很难判断这是否属实,因为他们的 ABAC 示例只是一次性的。
我一直在互联网上寻找 OPA 用作 ABAC 实现的示例,但我什么也没找到。
我的项目是一个 Web 应用程序,它允许最终用户创建资源并为其资源创建策略。我计划为最终用户创建一个 UI 来创建他们的策略。我的计划是抽象掉它的编码方面,而是为它们提供下拉菜单和按钮,这个 UI 将在幕后使用自定义语法,我将其解释为 OPA 策略。
我遇到的主要问题是如何将其作为 ABAC 来实现,它是否像构建将获取主题、对象和环境的属性并在它和 OPA 之间创建胶水的部分一样直接(本质上是创建一个 PIP ) 因为 OPA 本身似乎是事实上的 PEP 和 PDP?
我觉得我被文档淹没了,而且 OPA 自己的文档中似乎缺少很多来解释如何做到这一点。
我正在研究各种类型的访问控制模型,并且知道abac和rbac是受欢迎的模型.
对于我的一个项目,我有一个基本的场景,我无法理解我应该选择RBAC还是ABAC.显然RBAC是ABAC我应该去的子集,ABAC但是ABAC需要一些经验才能在xacml中编写策略.我们正在使用WSOIS和APIM.
我的身份服务器(IS)中有管理员,所有者和成员角色.
在某个时刻,我使用HTTP动词来实现愿望结果,即所有者无法访问DELETE请求,成员无法访问PUT&DELETE.
问题
我有一个仪表板,我在其中显示不同的部分,如最高用户,计费,服务,顶级消费者等.
nav-bar根据服务器的用户角色和属性进行填充,例如,成员不应该有权访问其他用户(添加,列表)nav-bar.nav-bar项目依赖于用户角色,以便我们可以通过RBAC?题
我们可以实现所有这些场景,RBAC但是为了管理nav-bar和查看相关的实现,我们需要在服务器中添加业务逻辑而不是使用WSO2-IS和WSO2-APIM.有没有办法管理隐藏/显示按钮和部分等视图权限,甚至消费相同,API但它应该为不同的api消费者返回不同的结果.
我有一个C#.net应用程序,它为公司的内部用户和外部客户提供服务.我需要做一些细粒度的授权,比如访问哪些资源.所以我需要基于资源或基于属性的东西,而不是基于角色的授权.
我想到的是:
第一种方法的问题在于它不是集中式的,也不是标准的,因此其他系统不能将其用于授权.
第二种方法的问题是它可能更慢(由于每个资源需要额外的调用).此外,我不确定市场上的应用程序如何支持像XACML这样的标准授权,以便于将来的集成.
那么,一般来说,对于应该为内部用户和外部客户提供服务的Web应用程序进行细粒度授权的良好实践是什么?
我希望存储权利的概念证明.我知道有不同的访问控制方式(DAC,MAC,RBAC,..).我的第一个想法是使用数据库,但我正在寻找一些像XACML这样的更成熟的标准,但遗憾的是我还没有找到一些真正的替代品.感谢任何tipps!
我正在为不断发展的系统开发REST API.一般来说,角色/声明访问控制工作完全像这样.
[HttpGet]
[Route("settings")]
[Authorization(Type = AuthorizationType.Admin, Permission = Permission.StoreSettings)]
public IHttpActionResult GetSettings() { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
当我有用户可以更深入地控制访问时,就会出现问题,如下图所示.这是系统的抽象示例.
如果我需要在其中一个区域查询某些内容,那很简单,但是当我需要从中获取所有内容时Items,Departments我必须编写相同的丑陋代码,我无法重复使用.不是真正的代码,但看起来像这样.
Db.Items.Where(i =>
i.Stores.Any(s => s.CityId == User.CityId) &&
Db.UserDepartmentRights.Any(udr => udr.UserId == User.UserId && i.DepartmentId == udr.DepartmentId));
Run Code Online (Sandbox Code Playgroud)
它显然是丑陋的,很难维护,特别是如果我需要为系统带来另一个级别.
是否有任何框架可以处理这个或我可以实现的正式架构?
asp.net authorization access-control entity-framework-6 abac
我有一个需要在其中实施 ABAC 的项目。我一直在互联网上搜索有关 ABAC 如何从 Nodejs 的角度具体工作的信息。我了解 ABAC 的基本概念,但不知道如何成功实施它。我已经阅读了有关该主题的白皮书,并试图检查一些声称已实施 ABAC 但似乎并不完整或清晰的项目。
首先我想从高层次描述我的项目,然后我计划如何在我的项目中实施 ABAC。我希望有人可以就这个主题给我指导,以及我想要实施 ABAC 的方式是好是坏,或者我遗漏了一些东西并且需要一些工作。
我的技术栈:
以下是我的堆栈中最重要的技术部分
我的项目:
它是一个电子商务平台,允许用户创建某些资源,这些资源可以出售和/或与系统中的其他用户共享。当这些资源被共享或被出售时,ABAC 就会“介入”。该项目将有一个界面,允许其最终用户为其资源创建 ABAC 策略。这些策略将影响其他用户和用户所在的组织。可能有 1000 多个用户和 100 多个 1000 资源。
我可能的 ABAC 实现:
所以我想做的第一件事是重组我的数据库,以便每个对象和主题(在这种情况下,将是用户及其资源)将有一个只用于其属性的表和一个查找表,用于跟踪哪个对象/主题具有哪些属性键/值对。例如:如果有一个users表,那么将有一个包含用户属性键的表和一个查找表,用于跟踪哪个用户分配给他们的属性键和该键的值。例子:
| userId | attr_key | attr_val |
|--------|------------|----------|
| 1 | department | sales |
Run Code Online (Sandbox Code Playgroud)
我的项目将有一个用户界面供最终用户为其资源创建策略。UI 将允许用户根据 4 个主要的 ABAC 原则创建策略:主体、客体、动作和环境(在这种情况下,“环境”将是时间)。在 UI 中,这些原则中的每一个都有一个按钮,用户可以向其添加属性和逻辑运算符。用户完成策略创建后,UI 将以特定方式将其保存到 MySQL 数据库中,以便在需要执行时查询。
鉴于我上面写的内容,我看到 ABAC 在我的项目中以这种方式工作:
我正在开发PHP应用程序,我想为某些对象添加访问控制。我没有将此问题标记为PHP,因为我认为该问题不是特定于语言的。
说我有一个“服务等级”
abstract class Service {
}
Run Code Online (Sandbox Code Playgroud)
许多服务都将此作为基类。一个伪示例为:
class Companies extends Service {
function getCompanyInfo($id) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
稍后,我要添加访问控制。示例的“ getCompanyInfoById”方法是“读取”操作,因此这将需要“读取”权限。
此时,我可以通过以下方式实现此目的:
每个选项的缺点:
是否有更好的方法可以完全解决此问题?