首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ABAC PIP属性请求

ABAC PIP属性请求
EN

Stack Overflow用户
提问于 2018-07-25 09:57:18
回答 1查看 261关注 0票数 2

PIP应该如何解析正确的属性值?它应该能够解析属性值是什么类型的接口?例如,我需要获得用户角色,在本例中,我只需要为用户id传递一个属性。现在让我们把这个任务变得更加复杂。如果我有可能更改用户角色的上下文,那么这里仅使用一个用户id是不够的。在这种情况下,我需要传递我们试图获得用户角色的访问级别。

因此,在这个例子中,我们可以看到,这个接口每次都会改变,唯一合适的就是接受一切。

在这种情况下,PIP通常是如何实现的?

更新

示例:我们有以下层次结构:

代码语言:javascript
复制
Level 0           1          2
Organization < tenants < documents.    

符号<表示右边是左操作数的子操作数。

用户可能在每个级别上都有角色管理或用户。如果用户在n级别上具有管理角色,那么他能够访问该级别和级别n+1、n+2、n+3.上的任何内容。同时,用户将在所有级别n-1、n-2、n-3.上都有角色用户。

示例:

代码语言:javascript
复制
    user        admin      admin
Organization < tenants < documents

这是第一部分。第二部分是关于文件。比方说,我们有一些属性,比如publicTenantpublicDocument.在不同层次上彼此之间的分辨率是不相关的,不仅需要对userId的了解,而且还需要了解我们工作的层次和资源属性(如organizationId、tenantId和documentId ),以便正确地解析用户的角色,以及资源属性。

如何在ABAC中正确地实现这一点?目前的解决方案是混合ACL/RBAC/ABAC。ACL和RBAC隐藏在ABAC下,用作主体的属性,但这并不正确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-29 00:19:57

以下方法基于XACML模型。如果您需要一个更好地处理请求中缺少一些资源属性的解决方案,请告诉我们。我可以更新我的答案,但是解决方案更复杂,因为它增加了对空/未定义属性的更多检查。

我使用了一个简化的语法,但是您可以通过以下几个约定轻松地将其转换为XACML:

  • 如果对于策略(Set)或规则没有提到目标,则意味着它是空的(适用于任何请求)。
  • 在这个例子中,像if属性x = 'XXX‘这样的谓词将转换为一个XACML /AnyOf/AllOf/MatchId=’string‘,AttributeValue 'XXX’以及属性x的相应AttributeDesignator。
  • 主题(研究)(资源)属性标识符以主题作为前缀。(resp.(资源)。
  • 策略/规则组合算法被隐式设置为拒绝--除非--处处允许。

PolicySet应该是这样的:

  • PolicySet‘根’
代码语言:javascript
复制
- Policy 'Organization Level' 
代码语言:javascript
复制
    - Rule 'Admin Role': Permit if _subject.organization-level-role_ = 'Admin'  
    - Rule 'User Role': Permit if _subject.organization-level-role_ = 'User' and ... other conditions to restrict what the User role can do at organization level ... (if too complex to fit in a Rule, you can change these Rules to Policies and the enclosing Policy to a PolicySet) 

代码语言:javascript
复制
- Policy 'Tenant Level' 
代码语言:javascript
复制
    - Rule 'Admin Role': Permit if _subject.tenant-level-role_ = 'Admin'  
    - Rule 'User Role': Permit if _subject.tenant-level-role_ = 'User' and ... other conditions to restrict what the User role can do at tenant level ... (if too complex to fit in a Rule, you can change these Rules to Policies and the enclosing Policy  to a PolicySet) 

代码语言:javascript
复制
- Policy 'Document level' 
代码语言:javascript
复制
    - Rule 'Admin Role': Permit if _subject.document-level-role_ = 'Admin'  
    - Rule 'User Role': Permit if _subject.document-level-role_ = 'User' and ... other conditions to restrict what the User role can do at document level ...  

为此,您需要实现一个或多个PIP来解决以下主题属性(您可以在一个PIP中完成所有操作,特别是如果所有的用户角色都由同一个系统管理,这取决于您):

  • 组织级别角色:组织级别的主题角色;要获得这个目标,PIP需要以下属性作为输入: subject.userId,resource.organizationId
  • 租户级别角色:租户级别的主题角色;要获得这个结果,PIP需要以下属性作为输入: subject.userId、resource.organizationId、resource.tenantId
  • 文档级角色:文档级的主题角色;要获得这一点,PIP需要以下属性作为输入: subject.userId、resource.organizationId、resource.tenantId、resource.documentId。

关于和平执行方案执行情况的几点评论:

  • 如果被试没有在相应的级别上指定任何角色,则PIP(s)可以为其中的每一个返回一个空袋子。
  • 如果从角色管理系统获取用户角色的成本很高,则可以通过同时从角色管理系统(在所有级别)获取所有用户角色来优化PIP,在策略评估期间第一次请求上述主题属性之一,然后将其保存在缓存中,并在请求另一个主题属性时从缓存返回。在这里可以进行许多缓存优化。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51516016

复制
相关文章

相似问题

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