我想申报一些政策:
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似乎是一个很好的开始。但我周围的人都不知道。如果有人能给我任何关于设置门禁系统的建议,我将不胜感激。
答案 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?