WSO2 身份服务器 XACML JSON 请求导致“不确定”[找不到 AttributeDesignator 属性]
Posted
技术标签:
【中文标题】WSO2 身份服务器 XACML JSON 请求导致“不确定”[找不到 AttributeDesignator 属性]【英文标题】:WSO2 Identity Server XACML JSON Request results in "Indeterminate" [Couldn't find AttributeDesignator attribute] 【发布时间】:2017-03-19 06:44:44 【问题描述】:我正在尝试使用 POSTMAN 向 wso2 授权端点发送 JSON 请求
这是我在身份服务器中发布的策略:
<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="samplePolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides" 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">
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="true"/>
</Match>
</AllOf>
</AnyOf>
</Target>
<Rule Effect="Permit" RuleId="permit"/>
这是我发送的 JSON 请求:
"Request":
"Action":
"Attribute": [
"AttributeId": "urn:oasis:names:tc:xacml:1.0:action:action-id",
"Value": "read"
]
,
"Resource":
"Attribute": [
"AttributeId": "urn:oasis:names:tc:xacml:1.0:resource:resource-id",
"Value": "http://127.0.0.1/service/very_secure/"
]
这两个代码块都来自这个博客 https://medium.com/@gdrdabarera/how-entitlement-management-works-with-rest-api-via-xacml-in-wso2-identity-server-5-3-0-7a60940d040c#.4lxgiw6tn
但无论我尝试什么,它总是给我“不确定”的响应
Postman response screenshot
我也尝试了我自己的政策和要求,但我总是得到相同的回应
发生了什么事?
【问题讨论】:
【参考方案1】:修正为:删除 xml 策略中“读取”属性值前后的所有空格:
<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="samplePolicyforJSON" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides" 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">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="true"></AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
</Target>
<Rule Effect="Permit" RuleId="permit"></Rule>
</Policy>
测试:
XACML 请求:
"Request":
"Action":
"Attribute": [
"AttributeId": "urn:oasis:names:tc:xacml:1.0:action:action-id",
"Value": "read"
]
,
"Resource":
"Attribute": [
"AttributeId": "urn:oasis:names:tc:xacml:1.0:resource:resource-id",
"Value": "http://127.0.0.1/service/very_secure/"
]
XACML 响应:
"Response": [
"Decision": "Permit",
"Status":
"StatusCode":
"Value": "urn:oasis:names:tc:xacml:1.0:status:ok"
]
还有:
XACML 请求:
<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false">
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">http://localhost/secureAccess/resource</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
</Attribute>
</Attributes>
</Request>
XACML 响应:
<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<Result>
<Decision>Permit</Decision>
<Status>
<StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok"/>
</Status>
</Result>
</Response>
【讨论】:
实际上额外的空间不在我的政策范围内。这只是我帖子中的错误。我设法通过重新启动服务器来解决问题。还是谢谢。【参考方案2】:如果您正确执行了所有步骤,它应该可以工作。 添加策略后,请检查策略是否添加正确。 例如。删除策略中不必要的空格
将其正确发布到 PDP 并尝试。您也可以在 IS 5.3.0 的策略窗口中尝试“尝试”选项。仅使用 xml 请求,因为它不适用于 JSON
【讨论】:
以上是关于WSO2 身份服务器 XACML JSON 请求导致“不确定”[找不到 AttributeDesignator 属性]的主要内容,如果未能解决你的问题,请参考以下文章
WSO2 身份服务器 GUI 为策略和请求创建不同的属性 ID
WSO2IS - 具有自定义属性的 XACML 策略返回“找不到 AttributeDesignator”