我可以在xacml策略的属性值中使用类似xpath的表达式

时间:2014-12-03 12:08:46

标签: xacml xacml3 xacml2

我想申报一些政策:

some one can visit anything under the img path, but img folders are scattered everwhere, so the attributevalue in the xacml policy may seem like this: "/rootpath/**XPATH_PART**/img/*".

如何写这种政策。

我查看了“XACML3.0核心规范”,“多个配置文件”,他们说

Each Individual Decision Request SHALL be identical to the original request context with two exceptions: the “multiple:content-selector” attribute SHALL NOT be present and an added “content-selector” attribute value SHALL be an XPath expression that evaluates to a single node in the <Content> element

我认为这意味着在策略文件中,我不能在AttributeValue中使用XPath来引用我所说的多个资源,对吧?因为请求被解析为单个请求,每个请求都有一个具有指定属性id的资源。

规格中是否存在我错过或误解的内容?或者任何人都可以建议一个更好的方法来做我想要的事情?

现在我想知道在资源中使用正则表达式是否可以做到这一点。相应的功能是 urn:oasis:names:tc:xacml:1.0:function:string-regexp-match

P.S。:我正在尝试为我的公司设置授权服务器,XACML似乎是一个很好的开始。但我周围的人都不知道。如果有人能给我任何关于设置门禁系统的建议,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我和Axiomatics的一些同事聊天,结论是你不需要XPath而是正则表达式。 XACML提供了一个适用于URI数据类型的正则表达式函数。它被称为anyURIRegexpMatch,它接受一个字符串(正则表达式)和要应用正则表达式的XACML属性。它返回true或false。

您的规则目标在ALFA(Axiomatics Language for Authorization)中看起来如下:

policy matchResources{
    apply firstApplicable
    rule allow{
        target clause anyURIRegexpMatch("^https?://(?:[a-z\\-]+\\.)+[a-z]{2,6}(?:/[^/#?]+)+\\.(?:jpg|gif|png)$", resourceId)
        permit
    }
}

另请参见另一个示例(XACML 2.0):How do I apply XACML rules to every child URI?