XACML 策略 - 获得“不确定”响应
Posted
技术标签:
【中文标题】XACML 策略 - 获得“不确定”响应【英文标题】:XACML policy - getting "indeterminate" response 【发布时间】:2017-10-16 13:39:13 【问题描述】:我正在尝试在 WSO2 中探索 XACML。我在 WSO2 IS 5.3.0 中使用以下策略
<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="InStorePolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" 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">access</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="true"></AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
</Target>
<Rule Effect="Permit" RuleId="Rule_for_employee">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Employee</AttributeValue>
<AttributeDesignator AttributeId="http://test.org/claim/role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
</Match>
</AllOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Manager</AttributeValue>
<AttributeDesignator AttributeId="http://wso2.org/claims/role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
</Target>
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">private/support</AttributeValue>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">private/team</AttributeValue>
</Apply>
<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#string" MustBePresent="true"></AttributeDesignator>
</Apply>
</Condition>
</Rule>
<Rule Effect="Permit" RuleId="Rule_for_manager">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Manager</AttributeValue>
<AttributeDesignator AttributeId="http://wso2.org/claims/role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
</Target>
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">private</AttributeValue>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">private/business</AttributeValue>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">private/leadership</AttributeValue>
</Apply>
<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#string" MustBePresent="true"></AttributeDesignator>
</Apply>
</Condition>
</Rule>
<Rule Effect="Deny" RuleId="Rule_deny_all"></Rule>
</Policy>
我创建了具有经理和员工角色的用户。但是当我使用具有以下值的“Tryit”时,我得到“不确定”
动作:访问, 主题:员工1, 资源:/私人/团队
另外,我在服务器控制台中收到“找不到 AttributeDesignator 属性”错误。我找不到更多详细信息。
谁能帮我理解这个问题?
-阿尔比·莫肯
【问题讨论】:
我尝试使用 WSO2 IS 5.4.0 alpha 并且它在那里工作。但是我使用的是预打包的 WSO2 IS,因为我必须将它与 WSO2 API Manager 一起使用,如下所述link 是否有可用于 5.4.0 alpha 和相应 WSO2 APIM 的预打包版本? 【参考方案1】:我使用 Axiomatics Policy Server 尝试了您的策略,我相信我可能已经找到了您的问题的根本原因。您的某些属性标记为MustBePresent
。这是一个可选标志,如果设置为 true,则如果您的属性没有值,则评估将返回 Indeterminate。
访问审查
以下是授予访问权限的三种不同方式:
stringAtLeastOneMemberOf(stringBag("private/support" , "private/team") , Attributes.resource.resource_id ) AND "access" == Attributes.action.action_id AND "Employee" == http://test.org/claim/role
"Manager" == http://wso2.org/claims/role AND stringAtLeastOneMemberOf(stringBag("private/support" , "private/team") , Attributes.resource.resource_id ) AND "access" == Attributes.action.action_id
"Manager" == http://wso2.org/claims/role AND "access" == Attributes.action.action_id AND stringAtLeastOneMemberOf(stringBag("private" , "private/business" , "private/leadership") , Attributes.resource.resource_id )
上面的符号使用ALFA,授权的缩写语言。
政策审核
这就是您的政策在政策编辑器中的样子。
顺便说一句,您的政策中有一些奇怪的东西:
-
您使用了 2 个相似但不同的属性标识符(http://wso2.org/claims/role 和 http://test.org/claim/role)。这是故意的吗?
没有描述您的任何政策和规则,这使得理解它们变得更加困难。
我不确定您是否需要将属性标记为
MustBePresent
。我通常不这样做,但这可能是一种偏好。
当一个简单的目标可以使用时,您可以使用条件
之前
之后
下面的比前面的更容易阅读。
示例请求/响应
以下示例利用 XACML 的 JSON 配置文件 (Wikipedia | Blog post)
"Request":
"AccessSubject":
"Attribute": [
"AttributeId": "http://test.org/claim/role",
"Value": "Employee"
]
,
"Resource":
"Attribute": [
"AttributeId": "urn:oasis:names:tc:xacml:1.0:resource:resource-id",
"Value": "private/support"
]
,
"Action":
"Attribute": [
"AttributeId": "urn:oasis:names:tc:xacml:1.0:action:action-id",
"Value": "access"
]
,
"Environment":
"Attribute": []
以及匹配的响应
"Response" :
"Decision" : "Permit",
"Status" :
"StatusCode" :
"Value" : "urn:oasis:names:tc:xacml:1.0:status:ok",
"StatusCode" :
"Value" : "urn:oasis:names:tc:xacml:1.0:status:ok"
【讨论】:
谢谢!在我设置 MustBePresent 'false' 后,它起作用了以上是关于XACML 策略 - 获得“不确定”响应的主要内容,如果未能解决你的问题,请参考以下文章