PIP如何解析正确的属性值?它必须具有哪种接口才能解析属性值?例如,我需要获取用户角色,在这种情况下,我只需要传递用户ID的属性即可。现在让我们使这个任务更加复杂。如果我具有可以更改用户角色的上下文,该怎么办,所以在这里仅一个用户ID是不够的。在这种情况下,我需要传递我们试图获取用户角色的访问级别。
因此,在此示例中,我们可以看到该接口每次都会更改,唯一合适的接口就是接受所有内容。
在这种情况下通常如何实施PIP?
更新
示例: 我们具有以下层次结构:
Level 0 1 2
Organization < tenants < documents.
符号<表示右是左操作数的子代。
用户可能在每个级别上都具有角色admin或user。如果用户具有级别 n 的管理员角色,则他可以访问级别为 n + 1,n + 2,n + 3 ... 的任何内容。同时,用户将在所有级别上具有角色用户 n-1,n-2,n-3 ... 。
示例:
user admin admin
Organization < tenants < documents
这是第一部分。第二部分是关于文件。假设我们有一些属性,例如 publicTenant 和 publicDocument 。彼此在不同级别上的解析无关紧要,并且不仅需要了解userId,而且还需要了解我们正在使用的级别,并且需要资源属性(如organizationId,tenantId和documentId)才能正确解析不仅用户的角色,而且还需要资源属性。
如何在ABAC中正确实现?当前解决方案是与ACL / RBAC / ABAC混合使用的。 ACL和RBAC隐藏在ABAC下,用作主题的属性,但这感觉不对。
答案 0 :(得分:1)
以下方法基于XACML模型。 如果您需要一种能够更好地处理请求中缺少某些资源属性的情况的解决方案,请告诉我们。我可以更新答案,但是解决方案更加复杂,因为它增加了对空/未定义属性的检查。
我使用一种简化的语法,但是您可以通过以下几种约定轻松地转换为XACML:
PolicySet如下所示:
PolicySet'root'
政策“组织级别”
政策“租户级别”
“文档级”政策
为此,您需要实现一个或多个PIP来解决以下主题属性(您可以在一个PIP中完成所有操作,特别是如果所有用户角色都由同一系统管理,则取决于您) :
有关PIP实施的一些评论: