首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从零开始在nodejs/react中实现ABAC

从零开始在nodejs/react中实现ABAC
EN

Stack Overflow用户
提问于 2019-07-08 12:41:38
回答 1查看 1.3K关注 0票数 6

我有一个项目,我需要执行ABAC。从Nodejs的角度来看,我一直在互联网上搜索ABAC是如何工作的。我了解ABAC的基本概念,但并不真正理解如何成功地实现它。我读过关于这一主题的白皮书,并试图审查一些声称已实施ABAC但似乎不完整或不明确的项目。

首先,我想描述我的项目在高水平,然后我计划如何在我的项目中实施ABAC。我希望有人能在这个主题上给我提供指导,以及我想要实现ABAC的方式是好的还是坏的,或者我遗漏了一些东西,它需要一些工作。

我的技术栈:

下面是我的堆栈中最重要的技术片段

  1. 反应
  2. nodejs
  3. 快递
  4. MySQL
  5. JSON网络令牌

我的项目:

它是一个电子商务平台,允许用户创建特定的资源,这些资源可以出售和/或与系统中的其他用户共享。当这些资源被分享或被出售时,即ABAC将“启动”。该项目将有一个界面,使其最终用户能够为他们的资源创建ABAC策略。这些策略将影响到其他用户和用户所在的组织。可能有1000 s的用户和1000 s的资源。

我可能的ABAC实现:

因此,我要做的第一件事是调整我的数据库,以便每个对象和主题(在本例中是用户和他们的资源)都有一个仅用于它们的属性的表和一个查找表,以跟踪哪个对象/主题具有哪个属性键/值对。因此,例如:如果有一个users表,那么就会有一个带有用户属性键的表和一个查找表来跟踪哪个用户分配了哪个属性键以及该键的值。示例:

代码语言:javascript
复制
| userId | attr_key   | attr_val |
|--------|------------|----------|
| 1      | department | sales    |

我的项目将为最终用户提供一个UI,以便为他们的资源创建策略。UI将允许用户根据4项主要ABAC原则创建策略:主题、对象、操作和环境(在这种情况下,“环境”将是时间)。在UI中,每个原则都有一个按钮,用户可以在其中添加一个属性和一个逻辑运算符。一旦用户完成创建策略,UI将以特定的方式将其保存到MySQL DB中,以便在需要强制执行时对其进行查询。

鉴于我在上面所写的内容,我看到ABAC在我的项目中是这样工作的:

  1. 创建一个允许或拒绝用户访问资源的策略(我将创建一个策略语法,该语法可以存储在DB中,稍后可用于解释和计算)
  2. 当用户试图在特定RESTFUL路由上对资源执行操作(假设他们想查看/获取)时,我将创建的PEP将拦截RESTFUL请求并提取请求中发送的所有数据,然后PEP将使用从请求中提取的数据向PDP发送请求,以请求获取连接到用户和请求资源的策略。
  3. PDP将提取该资源的策略和与该策略相关的所有属性(这将是对PIP的主题、对象和环境的请求),然后它将组装策略。
  4. 组装的策略将根据请求数据、当前属性和根据属性计算时使用的值进行计算,并生成一个布尔决策。
  5. 布尔决策将用于返回所请求的资源或返回其被拒绝回发起请求的路由的原因。

所以,首先,上述方法是否可行?第二,这是否切合实际?最后,在ABAC范例中,我计划的实现是否缺少什么,或者对如何改进它有什么建议?

EN

回答 1

Stack Overflow用户

发布于 2022-02-20 12:55:04

首先,你想要解决的问题很复杂,需要不断更新,将来可能会有麻烦。在不使用数据库上的任何策略引擎的情况下解释策略将浪费您的时间,并可能迫使您维护它。要根据技术栈回答问题,OPA https://www.openpolicyagent.org/docs/latest/rest-api/将帮助您管理和执行您的策略。

OPA RBAC策略示例

代码语言:javascript
复制
package app.abac

default allow = false

allow {
   user_is_owner
}

allow {
   user_is_in_sales_department
   user_is_senior
}

user_is_owner {
   input.user.id == input.resource.owner_id
}

user_is_in_sales_department {
   input.user.attributes.department == "sales"
}

user_is_senior {
   input.user.attributes.tenure > 8
}

如上例所示,您可以将用户属性和资源属性与opa进行比较。

这将返回一个关于用户是否应该执行此事件的结果。

关于如何实现它,有多种选项,您可以从这个链接https://www.openpolicyagent.org/docs/latest/integration/访问它。

我通常在我的项目中使用黄金。我认为在我的核心业务逻辑中包含策略管理是不合理的,我创建了一项不同的服务,以便自己使用OPA的go库管理策略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56935214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档