如何使用 XACML 中的义务跟踪属性的值
How to trace the value for an attribute using obligations in XACML
想知道是否有办法加载先前由 PIP 扩展属性查找器加载的属性值并将其传输 ($myattr1
) 到义务中,以便以明文形式获得打印输出消息,主要用于执行调试任务。
低于我想添加到我的规则中的 XACML 义务(以抽象符号编写):
<xacml2:Obligations>
<xacml2:Obligation FulfillOn="Permit" ObligationId="debug1">
$myattr1 = AttributeId="http://red.com/subject/groupsUserBelong"
<xacml2:AttributeAssignment AttributeId="debug1" DataType="http://www.w3.org/2001/XMLSchema#string">Attribute found: $myattr1</xacml2:AttributeAssignment>
</xacml2:Obligation>
</xacml2:Obligations>
更新代码部分
下面是一个示例,说明如何将文本消息与来自 PIP 查找的动态数据结合起来,通过 ObligationExpressions 生成输出:
<Rule Effect="Deny" RuleId="Deny-Rule1">
<Target></Target>
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:not">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">myGroup</AttributeValue>
<AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="http://red.com/subject/groupsUserBelong" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
</Apply>
</Apply>
</Condition>
<ObligationExpressions>
<ObligationExpression FulfillOn="Deny" ObligationId="groupscheck">
<AttributeAssignmentExpression AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Rule 1 - The groups validation error</AttributeValue>
</AttributeAssignmentExpression>
</ObligationExpression>
<ObligationExpression ObligationId="debug1" FulfillOn="Deny">
<AttributeAssignmentExpression AttributeId="debug1">
<AttributeDesignator AttributeId="http://red.com/subject/groupsUserBelong" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
</AttributeAssignmentExpression>
</ObligationExpression>
</ObligationExpressions>
</Rule>
不,这在 WSO2 IS 和 XACML 2.0 中是不可能的。为此,您需要使用 XACML 3.0。在义务中添加变量的能力(它们在 XACML 规范中称为属性分配)已添加到 XACML 3.0。
Axiomatics Policy Server 确实支持这一点。正如您所指出的,它是一个用于调试目的的巧妙功能,但也适用于其他情况,例如
- 拒绝用户向自己转账的权利 + 通知其经理的义务。
在此示例中,义务将包含经理的电子邮件。这是一个使用 alfa 语法的示例。
policy transferMoney{
target clause actionId == "transfer"
apply firstApplicable
rule denySelfTransfer{
condition requestor==recipient
deny
on deny {
obligation notifyManager{
message = "An employee tried to transfer money to themselves"
employee = employeeId
email = managerEmail
}
}
}
}
想知道是否有办法加载先前由 PIP 扩展属性查找器加载的属性值并将其传输 ($myattr1
) 到义务中,以便以明文形式获得打印输出消息,主要用于执行调试任务。
低于我想添加到我的规则中的 XACML 义务(以抽象符号编写):
<xacml2:Obligations>
<xacml2:Obligation FulfillOn="Permit" ObligationId="debug1">
$myattr1 = AttributeId="http://red.com/subject/groupsUserBelong"
<xacml2:AttributeAssignment AttributeId="debug1" DataType="http://www.w3.org/2001/XMLSchema#string">Attribute found: $myattr1</xacml2:AttributeAssignment>
</xacml2:Obligation>
</xacml2:Obligations>
更新代码部分
下面是一个示例,说明如何将文本消息与来自 PIP 查找的动态数据结合起来,通过 ObligationExpressions 生成输出:
<Rule Effect="Deny" RuleId="Deny-Rule1">
<Target></Target>
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:not">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">myGroup</AttributeValue>
<AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="http://red.com/subject/groupsUserBelong" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
</Apply>
</Apply>
</Condition>
<ObligationExpressions>
<ObligationExpression FulfillOn="Deny" ObligationId="groupscheck">
<AttributeAssignmentExpression AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:text">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Rule 1 - The groups validation error</AttributeValue>
</AttributeAssignmentExpression>
</ObligationExpression>
<ObligationExpression ObligationId="debug1" FulfillOn="Deny">
<AttributeAssignmentExpression AttributeId="debug1">
<AttributeDesignator AttributeId="http://red.com/subject/groupsUserBelong" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
</AttributeAssignmentExpression>
</ObligationExpression>
</ObligationExpressions>
</Rule>
不,这在 WSO2 IS 和 XACML 2.0 中是不可能的。为此,您需要使用 XACML 3.0。在义务中添加变量的能力(它们在 XACML 规范中称为属性分配)已添加到 XACML 3.0。
Axiomatics Policy Server 确实支持这一点。正如您所指出的,它是一个用于调试目的的巧妙功能,但也适用于其他情况,例如
- 拒绝用户向自己转账的权利 + 通知其经理的义务。
在此示例中,义务将包含经理的电子邮件。这是一个使用 alfa 语法的示例。
policy transferMoney{
target clause actionId == "transfer"
apply firstApplicable
rule denySelfTransfer{
condition requestor==recipient
deny
on deny {
obligation notifyManager{
message = "An employee tried to transfer money to themselves"
employee = employeeId
email = managerEmail
}
}
}
}