定义自定义授权策略的最佳方式



我正在用MongoDB开发一个项目,我有一个场景,这样我就可以根据用户的角色限制数据对用户的可见性,例如,如果我有一份格式为的文档

{
"testme1":"fooo",
"testme2":"foobar"
}

角色为"admin"的用户可以同时看到"testme1"one_answers"testme2",而"guest"只能看到"testme 2"。动态定义这些授权规则的最佳方式是什么,以便我的包装器api只能根据规则获取数据。我的方法是为用户提供一个web"UI"来定义规则,并根据他的声明在我的服务器中保留一个"XML"文件。请让我知道是否有人有更好的想法,以及他们是否有一些数据库级别的方法来做这个

存在一个授权标准,您可以使用它来定义您的授权策略。该标准被称为XACML,即可扩展访问控制标记语言。它实现了一个名为基于属性的访问控制(ABAC)的授权模型。你可以在这里阅读这两个主题:

  • NIST关于基于属性的访问控制(ABAC)的页面
  • OASIS可扩展访问控制标记语言(XACML)

XACML定义了一个具有以下概念的体系结构:

  • 策略决策点(PDP)
  • 政策执行点(PEP),以及
  • 策略信息点(PIP)

在典型流程中,PEP保护您的数据/服务/API。PEP将向PDP发送授权请求:

  • 用户Alice可以查看记录#123吗

PDP将求助于PIP来检索丢失的属性,例如用户的角色和权限,以及资源属性,例如数据的敏感性、白名单或黑名单。。。根据新信息,PDP可以做出决定:允许拒绝。访问被允许或阻止。

使用XACML,授权策略的丰富性没有限制。我在Axiomatics公司工作,该公司实施XACML,我们的解决方案用于制造业、医疗保健和银行业,以动态方式保护对敏感数据的访问(例如,经理可以编辑他们拥有的文档)。

XACML支持集中管理的外部授权。它还支持我喜欢称之为的任何深度授权,这意味着您可以将XACML应用于web API、业务逻辑、演示UI以及数据库。

HTH-

最新更新