首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XACML响应不适用

XACML响应不适用
EN

Stack Overflow用户
提问于 2018-01-29 09:32:19
回答 1查看 600关注 0票数 1

嗨,我正在用XACML3做实验,我发现当我得到许可时,请求与我得到响应的条件相匹配。但当它没有的时候,我就变得不适用,而不是否认。我不确定这种行为是否正确。我明白,我可以用deny-unless-permit组合算法掩盖不适用的响应,但我不理解这种行为。

以下是我的政策

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" PolicyId="urn:oasis:names:tc:xacml:2.0:conformance-test:IIA1:policy"
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides"
    Version="1.0">
    <Target>
        <AnyOf>
            <AllOf>
                <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MyApp</AttributeValue>
                    <AttributeDesignator
                        AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
                        DataType="http://www.w3.org/2001/XMLSchema#string"
                        Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                        MustBePresent="true" />
                </Match>
            </AllOf>
        </AnyOf>
    </Target>
    <Rule Effect="Permit"
        RuleId="urn:oasis:names:tc:xacml:2.0:conformance-test:IIA1:rule">
        <Target />
        <Condition>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-equal">
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only">
                    <AttributeDesignator
                        AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age"
                        Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
                        DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
                </Apply>
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only">
                    <AttributeDesignator
                        AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age2"
                        Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
                        DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
                </Apply>

            </Apply>
        </Condition>
    </Rule>
</Policy>

这是我的请求,我得到了不适用的答复。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Request  ReturnPolicyIdList="false" CombinedDecision="false" xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
    <Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age">
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">45</AttributeValue>
    </Attribute>
    <Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age2">
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">4</AttributeValue>
    </Attribute>
  </Attributes>
  <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
    <Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id">
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MyApp</AttributeValue>
    </Attribute>
  </Attributes>
</Request>

只有在年龄和age2匹配的情况下,我才能得到响应,否则不适用。不适用意味着没有找到匹配规则,但目标确实与resource-id字符串成功匹配,那么为什么响应不适用?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 18:31:46

获取NotApplicable是一种正常的响应。事实上,这可能是最常见的反应。

XACML在响应中定义了4个可能的决定:

  • 许可证
  • 拒绝
  • NotApplicable
  • 不确定(我相信你以前见过。见此post)

在第一次编写策略时,很容易命中NotApplicable,因为它实际上意味着您的请求与策略不匹配。想象一下,您的政策是关于银行帐户的,并且您发送有关健康记录的请求。你会得到NotApplicable。

有一些方法可以掩盖NotApplicable,并强制PDP返回、许可或拒绝。其中一种方法是使用下列组合算法之一:

  • 许可证-除非-拒绝
  • 拒绝-除非-许可

如果您的策略包含3个规则,但它们都不适用,策略通常会返回NotApplicable。使用前两种组合算法中的一种,您将获得许可或拒绝。

另一种选择是使用另一条规则作为捕获--所有这些规则将拒绝任何以前没有处理过的访问。在这种情况下,家长的组合算法需要首先适用。见下文。

目标还是条件?

在XACML中,有两个关键元素可用于定义授权策略的范围(广义而言):

  • 目标元素:目标可以存在于PolicySet、策略和规则中。将它们用于与和/或/和例如role=="manager" and age>18相结合的简单匹配逻辑。
  • 条件元素:条件只存在于规则元素中。它们可以用于更高级的匹配,特别是用于比较两个属性,例如age>ageLimit。不能在目标中执行后一项操作。

要使规则适用,目标和条件(如果有的话)都必须计算为true。

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

https://stackoverflow.com/questions/48498090

复制
相关文章

相似问题

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