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

ABAC属性解析
EN

Stack Overflow用户
提问于 2018-07-25 08:57:36
回答 2查看 323关注 0票数 0

我们在ABAC中有一个主语、对象(资源)和操作(动作)。主题和对象具有将用于执行规则的属性。

  1. 我们可以有不同类型的多种学科,也可以有资源。有些属性与某些类型的资源相关,而有些属性在另一种资源的上下文中没有任何意义。在这种情况下,应该如何实现正确的属性模型?例如,我们有AB类型的资源。对于类型A属性isPublic是相关的,对于B则不是。如果PIP将收到获取BisPublic属性的请求,那么它应该怎么办?什么也不返回,或者会导致消极规则解析的东西?同样的问题也适用于主题。如何定义和解析正确的属性模型?
  2. 如果向PDP提出请求,我们应该传递我们所拥有的所有可能的属性吗?据我所知,这将提高性能,因为它将允许通过策略的目标过滤掉许多策略。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-26 13:24:17

如果向PDP请求,我们会传递我们所拥有的所有可能的属性吗?据我所知,这将提高性能,因为它将允许通过策略的目标过滤掉许多策略。

在ABAC中,您可以选择将所有属性从PEP传递给PDP。例如,你可以说:

  • 销售经理艾丽斯能批准销售草案中的记录#123吗?

在以上问题中,我们通过了爱丽丝的角色和部门,以及记录的地位和部门。我们假设这是所有的政策需要达成一个决定。这在PEP (或应用程序)和PDP之间引入了紧密耦合,但是它使PDP非常快,因为它不需要外接源(PIP)。

极端相反的是只发送“键”属性。

  • 爱丽丝能批准记录#123吗?

在这种情况下,PDP将需要为用户的属性和资源的属性调用PIP,从而导致总共4次可能的调用。你可能觉得这听起来很糟糕。但事实并非如此。首先,

  • 现在查询数据源是非常有效的。
  • 您可以在PDP中缓存值,这样就不必一直获取Alice的角色
  • 只有在真正需要属性的情况下才会获取它。例如,如果您已经确定Alice不是经理,我们甚至不会去获取她的部门或资源属性。

就像迈克一样,我为公理学工作。我们已经建立了优化策略评估和属性检索的算法。这使得我们的PDP非常快。

票数 1
EN

Stack Overflow用户

发布于 2018-07-25 14:39:01

关于您的第一个问题,发送对规则的决定不需要的附加属性不会影响决策。看看PDP做出的这个XACML决定:

代码语言:javascript
复制
<EvaluationEvent xmlns="http://www.axiomatics.com/v1/EvaluationEvent" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
    <GroupId>ddc4a53f-1c98-403c-81ce-938c97645d7d</GroupId>
    <GroupVersion>6</GroupVersion>
    <Timestamp>2018-07-24T02:39:21.907Z</Timestamp>
    <EvaluationTimeMillis>0</EvaluationTimeMillis>
    <ClientIdentity>User+username%3D%22pdp-user%22%2C+roles%3D%22pdp-user%22</ClientIdentity>
    <ClientSource>127.0.0.1:49502</ClientSource>
    <InterfaceType>SOAP</InterfaceType>
    <PdpIdentity>f6a721ba-058e-44df-9434-ec1505e99ddc</PdpIdentity>
    <xacml-ctx:Request ReturnPolicyIdList="false" CombinedDecision="false" xmlns:xacml- ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
        <xacml-ctx:RequestDefaults>
            <xacml-ctx:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml- ctx:XPathVersion>
        </xacml-ctx:RequestDefaults>
        <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject- category:access-subject" >
            <xacml-ctx:Attribute AttributeId="com.axiomatics.seniority" IncludeInResult="false">
                <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">1</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
            <xacml-ctx:Attribute AttributeId="role" IncludeInResult="false">
                <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ADMIN</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
            <xacml-ctx:Attribute AttributeId="com.axiomatics.emailAddress" IncludeInResult="false">
                <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">userone@user.com</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
        </xacml-ctx:Attributes>
        <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute- category:resource" >
            <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false">
                <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">secretmessage</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
        </xacml-ctx:Attributes>
    </xacml-ctx:Request>
    <ResultEntries>
        <ResultEntry>
            <xacml-ctx:Result>
                <xacml-ctx:Decision>Deny</xacml-ctx:Decision>
                <xacml-ctx:Status>
                    <xacml-ctx:StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok"/>
                </xacml-ctx:Status>
            </xacml-ctx:Result>
            <EvaluationComplexity>21</EvaluationComplexity>
        </ResultEntry>
    </ResultEntries>
</EvaluationEvent>

在本地主机上的示例项目中,我在特定规则中寻找的惟一属性是属性com.axiomatics.seniority是否等于1或2,这意味着ADMIN是提供的额外属性。然而,这并不影响决策。

关于你的第二个问题,如果我完全理解的话,我不是很清楚,但我想你是关心PDP的表现的。一般来说,PDP决策的性能--将内存和XACML的软件实现放在一边--是基于您的策略的。如果发生这种情况,您将希望尽快在您的策略中获得“拒绝”。

关于在PEP中设置属性,我发现使用一个根据将要发生的决策类型设置默认属性的函数是有帮助的,如下所示:

代码语言:javascript
复制
@Override
public void uiDecisionSetDefaultAttributes() {
    Authentication auth = 
SecurityContextHolder.getContext().getAuthentication();
    attrCatAry.add("SUBJECT");
    attrTypeAry.add("INTEGER");
    attrIdAry.add("com.axiomatics.seniority");
    Integer userId = null;
    try {
        userId = userRepository.findByEmail(auth.getName()).getSeniority();
    } catch (Exception e) {
        log.info(e.toString());
    }
    attrValAry.add(userId);

}

完全披露-我为公理化工作,我的答案是基于一个完全符合XACML标准的软件,比如公理学软件。

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

https://stackoverflow.com/questions/51514833

复制
相关文章

相似问题

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