如何在 XACML 中添加字符串/URI 匹配

Posted

技术标签:

【中文标题】如何在 XACML 中添加字符串/URI 匹配【英文标题】:How to add string/URI matching in XACML 【发布时间】:2020-05-17 04:16:49 【问题描述】:

我正在努力学习 XACML。 我试图实施 PDP 并试图摆弄政策

<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">
    <Description>
        Policy for Test IIA001.
    </Description>
    <Target/>
    <Rule Effect="Permit" RuleId="urn:oasis:names:tc:xacml:2.0:conformance-test:IIA1:rule">
        <Description>
            Can Teacher Read record from Faculty Service
        </Description>
        <Target>
            <AnyOf>
                <AllOf>
                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TEACHER</AttributeValue>
                        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                    </Match>
                </AllOf>
            </AnyOf>
            <AnyOf>
                <AllOf>
                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:anyURI-equal">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">http://localhost:8765/faculty/</AttributeValue>
                        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#anyURI" MustBePresent="false"/>
                    </Match>
                </AllOf>
            </AnyOf>
            <AnyOf>
                <AllOf>
                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
                        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                    </Match>
                </AllOf>
                <AllOf>
                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">write</AttributeValue>
                        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                    </Match>
                </AllOf>
            </AnyOf>
        </Target>
    </Rule>
</Policy>

我想更改为接受http://localhost:8765/faculty/* 或包含http://localhost:8765/faculty 的正则表达式

                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">http://localhost:8765/faculty/</AttributeValue>```


【问题讨论】:

【参考方案1】:

您可以使用anyURI-regexp-match 或anyURI-contains,甚至更好的是anyURI-starts-with 函数(请参阅链接了解确切的函数标识符)。

一般来说,所有标准函数都在appendix A.3 of the XACML 3.0 standard 中指定,然后每个 XACML 实现都可以添加自己的函数和/或允许您插入自己的函数,在这种情况下,这取决于您使用的实现。

【讨论】:

我要补充一点,没有必要像您所说的那样实现您自己的 PDP(“我试图实现 PDP”) - 只需使用开源 Java 和最新的 AuthZForce 或如果您想要商业广告,请查看 Axiomatics。 @SyedAliUmairTirmizi 如果您觉得可以,请接受答案。

以上是关于如何在 XACML 中添加字符串/URI 匹配的主要内容,如果未能解决你的问题,请参考以下文章

寻呼机号码与 drupal 7 中的 URI 字符串不匹配?

XACML 编辑器使用 <Condition> 和字符串比较

XACML - 如何表达“非男性”而不是“非性别==男性”[重复]

即使策略规则中缺少该属性,具有附加属性的 XACML 3.0 请求也匹配

Nginx Location匹配顺序

Nginx Location匹配规则