0

我通过阅读 2013 年 1 月 22 日版本的 OASIS 标准文档来学习 XACML 3.0。

第一个示例策略(第 4.1.1 节)非常简单易懂:Name-match必须对请求的subject-id属性(以 RFC822 名称的形式)执行一个函数:如果提交的名称与规则AttributeValue属性的值匹配,则 PDP评估为Permit

<?xml version="1.0" encoding="UTF-8"?>
<Policy 
    xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17 http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd"
    PolicyId="urn:oasis:names:tc:xacml:3.0:example:SimplePolicy1" 
    Version="1.0"
    RuleCombiningAlgId="identifier:rule-combining-algorithm:deny-overrides">
    <Description>
        Medi Corp access control policy
    </Description>
    <Target/>
    <Rule 
        RuleId= "urn:oasis:names:tc:xacml:3.0:example:SimpleRule1"
        Effect="Permit">
        <Description>
            Any subject with an e-mail name in the med.example.com domain 
            can perform any action on any resource. 
        </Description>
        <Target>
            <AnyOf>
                <AllOf>
                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">
                            med.example.com
                        </AttributeValue>
                        <AttributeDesignator 
                            MustBePresent="false"
                            Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-688 subject"
                            AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
                            DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"/>
                    </Match>
                </AllOf>
            </AnyOf>
        </Target>
    </Rule>
</Policy>

然后,该文档继续显示提交给 PDP 的假想决策请求(正确格式化为请求上下文)。这也很简单:subject-idbs@simpsons.com 的主题正在尝试read对文件系统资源执行操作:

<?xml version="1.0" encoding="UTF-8"?>
<Request 
    xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17 http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd"
    ReturnPolicyIdList="false">
    <Attributes 
        Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-757 subject">
        <Attribute
            IncludeInResult="false"
            AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id">
            <AttributeValue DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name">
                bs@simpsons.com
            </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#anyURI">
                file://example/med/record/patient/BartSimpson
            </AttributeValue>
        </Attribute>
    </Attributes>
    <Attributes
        Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action">
        <Attribute
            IncludeInResult="false"
            AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">
                read
            </AttributeValue>
        </Attribute>
    </Attributes>
</Request>

现在,我不明白的部分来了:文档说(第 805 到 807 行)

PDP 现在将请求上下文中的属性与该策略中的一个规则的目标进行比较。请求的资源<Target>元素匹配,请求的操作<Target>元素匹配,但请求的 subject-id 属性与“med.example.com”不匹配。

好的subject-id不匹配,但是如果资源和操作没有在规则中指定,它们如何完全匹配?也许它们的缺席以某种方式被丢弃并且不适用于目标,但是文档说它们匹配,这是一个标准文档,并且每个单词的确切含义都非常重要。我没有找到任何关于它的信息,这对我来说是一件大事,因为我正在尝试构建自己的 XACML3.0 兼容系统作为辅助项目。

我错过了什么?

谢谢!

4

0 回答 0