【问题标题】:How to use XACML and PIP in real application?如何在实际应用中使用 XACML 和 PIP?
【发布时间】:2014-12-23 01:10:39
【问题描述】:

如何使用 XACML(使用 WSO2 PDP)和 PIP(如果需要)覆盖以下场景。

在二手车应用中,特别是位置,销售人员是 允许查看更新汽车价格。他们只能查看以下车辆 分配给他们。

现在,通过,我们可以为销售人员角色创建策略并根据位置隐藏特定菜单。

但是getCarDetails(Object User){...}这个方法怎么办呢?

这里基于UserID(销售人员)我们将显示列表。

如何用规范设计这个?

对此我的理解是:我们可以使用 并在此方法之上添加“销售人员”角色。但它只会限制来自不同角色的其他用户。从那里我很困惑,我们应该根据我们的传统应用程序使用用户 ID 使用数据库调用并获取汽车列表,还是有办法通过 xacml 获得细粒度访问?

【问题讨论】:

  • 你的问题在哪里。 PIP 进来了吗?

标签: xacml xacml spring-security wso2is xacml xacml3 alfa


【解决方案1】:

您的问题包含 2 个问题:

  1. 如何为我的策略建模?
  2. 如何保护我的应用程序? (执行决定)

首先,让我们在 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 策略管理的角色,除非你正确记录它们。

您可以采取两种方法。

  1. 使用多决策配置文件 - 这是 XACML 3.0 可选配置文件集的一部分,或者
  2. 使用反向查询方法 - 这仅适用于 Axiomatics。我不确定 WSO2 是否支持它。

多决策配置文件 (MDP) 定义了如何使用单个请求将多个以 编写的授权请求发送到策略决策点 (PDP)。这为您节省了几次往返行程。您将收到的响应将包含与发送的原始请求中的授权请求一样多的决定。您还可以节省运输时间和评估时间。当您知道要保护的项目数量以及该数量在 1 到 1,000 之间但不大于时(当然,它总是值得一试),请使用 MDP。您可以在 Axiomatics blog 上阅读有关 MDP 的更多信息。在您的情况下,流程如下:

  1. 致电getCarDetails(Object user)
  2. 调用底层数据库检索所有汽车
  3. 以 MDP 方式调用 PDP 以获取找到的所有记录以做出决定
  4. 仅返回您拥有许可的记录

主要缺点是您最终可能会从数据库中收到数千条甚至数百万条记录。那么使用 MDP 是不切实际的。

反向查询方法很有趣,尽管它特定于 Axiomatics。它在 XACML PDP 之上定义了一个新接口,允许您以相反的方式查询授权引擎。而不是问:

  • Alice 可以查看 #123 号车吗?

反向查询让你问

  • Alice 可以查看哪些汽车?

响应不是 Permit 或 Deny,而是过滤器表达式,例如 SQL 语句,例如

  • SELECT id FROM cars WHERE assignmentSP='Alice';

然后,您所要做的就是对您的数据库使用 SQL 语句来查询它并仅返回授权的数据。无论您的数据库中有多少数据,这都有效。您可以通过webinar 找到有关 ARQ SQL 的更多信息。

【讨论】:

  • 谢谢! wso2 不支持 RQuery 我想了解您在 PDP 级别是否有原始数据库的副本?否则我们如何获得分配给 Alice 的汽车列表?因为汽车对于应用程序来说是动态的,例如。目前有 10 辆车分配给用户 Alice。突然主管在他的列表中添加了 20 多辆汽车,这些汽车将在应用程序级数据库中。然后这 20 辆汽车将如何在 PDP 级别的策略中自动分配,直到它也有这个最新信息。我可能会在理解上犯一些错误。如果你可以把 alfa 代码创建的策略放上去
  • 你能再提出一个 SO 问题以便我回答吗?
  • 再次感谢大卫,我把问题放在这里 [stackoverflow.com/questions/27626555/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多