如何涵盖以下使用XACML(可与WSO2 PDP)和PIP(如果需要)场景。
在二手车的应用,在特定的位置,销售人员被允许查看更新汽车的价格。 他们只能查看其分配给他们的汽车。
现在从XACML何卫青,我们可以创建一个销售人员的作用的政策和基于位置隐藏特定的菜单。
但是做什么用的方法getCarDetails(Object User){...}
在此基础上UserID
(营业员),我们将展示列表。
如何用设计这个XACML规范?
我对这个的理解是:我们可以用弹簧安全性 ,并添加了该方法的顶部“推销员”的角色。 但它只会限制从不同角色的其他用户。 从那里,我很困惑,我们应该使用数据库调用按照我们的传统应用程序与用户名和获得汽车的名单还是有一种方式来获得与XACML细粒度的访问?
你的问题包含两个问题:
- 如何将我的策略模型?
- 如何保护我的应用程序? (强制执行的决定)
首先,让我们在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政策管理,除非你正确地记录他们的角色。
有您可以采取两种方法。
- 使用多个决策档案 - 这是XACML 3.0组可选的配置文件的一部分,或
- 使用反向查询方法 - 这是特定于只公理化。 我不知道WSO2支持它。
在多个决策模式(MDP)定义了如何您可以发送写在多个授权请求XACML使用单个请求的策略决策点(PDP)。 这样可以节省你几个往返。 您将收到的响应将包含尽可能多的决策,在发送的原始请求授权请求。 您节省运输时间和评估时间太长。 当你知道你要多少项目,以保护和时数为1和1000,但不大于之间的任何地方使用MDP(虽然,当然,它始终是值得一试)。 你可以阅读更多的关于该MDP 公理化博客 。 在你的情况,流动情况如下:
- 呼叫
getCarDetails(Object user)
。 - 调用底层数据库检索所有汽车
- 调用PDP在MDP时尚的所有记录找到致富的决定
- 仅返回那些您有一个许可证记录
其主要缺点是,你可能最终如果不是数以百万计的从数据库记录接收数千人。 使用MDP则是不实际的。
反向查询方法很有趣尽管具体到公理化。 它定义了一个XACML PDP之上的新的接口,它可以让你查询的授权引擎上逆向。 不要问:
反向查询,您可以问
代替所述响应是允许或拒绝的,该响应是作为SQL语句例如过滤器表达式这样
- SELECT ID FROM汽车WHERE assignedSP = '爱丽丝';
所有您需要做的就是使用SQL语句对数据库进行查询,并只返回题为数据。 此作品无论你有多少数据在数据库中。 你可以找到通过这对ARQ SQL更多信息网络研讨会 。