如何使用XACML(使用WSO2 PDP)和PIP(如果需要)覆盖以下场景。
在二手车应用中,特别是位置,销售人员 允许查看更新汽车价格。他们只能查看汽车 分配给他们。
现在,从xacml的角度,我们可以为销售人员角色创建政策,并根据位置隐藏特定菜单。
但是如何处理方法getCarDetails(Object User){...}
?
此处基于UserID
(销售员),我们将显示该列表。
如何使用xacml规格进行设计?
我对此的理解是:我们可以使用spring-security并在此方法之上添加“销售人员”角色。但它只会限制来自不同角色的其他用户。从那里我很困惑,我们应该根据我们的传统应用程序使用数据库调用userid并获取汽车列表或有没有办法获得xacml的细粒度访问?
答案 0 :(得分:1)
您的问题包含两个问题:
首先,让我们在ALFA中为您的政策建模:
规则:当且仅当汽车的指定销售员标识符等于请求用户的身份时,销售人员才能查看汽车。
在ALFA中,这变为:
namespace com.axiomatics{
/**
* A sales person can view a car if and only if the car's assigned salesperson
* identifier is equal to the requesting user's identity.
*/
policy viewCars{
target clause user.role=="sales person" and actionId == "view" and objectType=="car"
apply firstApplicable
/**
*
*/
rule allowAssignedUser{
permit
condition car.assignedSalesPerson==user.identifier
}
}
}
这是你的建模排序。
现在,关于第二个问题:我如何执行授权?除非你正确地记录它们,否则我会反对混合Spring Security和XACML策略管理的角色。
您可以采取两种方法。
多决策配置文件(MDP)定义了如何使用单个请求将xacml中写入的多个授权请求发送到策略决策点(PDP)。这可以节省您多次往返。您将收到的响应将包含与发送的原始请求中的授权请求一样多的决策。您还可以节省运输时间和评估时间。当您知道要保护多少项目以及该数字在1到1,000之间但不是更大时,请使用MDP(当然,这总是值得一试)。您可以在Axiomatics blog上阅读有关MDP的更多信息。在您的情况下,流程如下:
getCarDetails(Object user)
。主要缺点是,您最终可能会从数据库中接收数千条(如果不是数百万条)记录。然后使用MDP是不切实际的。
反向查询方法虽然特定于Axiomatics,但却很有趣。它在XACML PDP之上定义了一个新接口,允许您以相反的方式查询授权引擎。而不是问:
反向查询可让您询问
响应是一个过滤表达式,例如SQL语句,而不是响应是Permit或Deny,例如。
然后,您只需对数据库使用SQL语句进行查询,并仅返回授权数据。无论您的数据库中有多少数据,这都有效。您可以通过此webinar找到有关ARQ SQL的更多信息。