如何在实际应用中使用XACML和PIP?

如何在实际应用中使用XACML和PIP?,xacml,spring-security,wso2is,xacml3,alfa,Xacml,Spring Security,Wso2is,Xacml3,Alfa,如果需要,如何使用带有WSO2 PDP和PIP的XACML覆盖以下场景 在二手车应用中,特别是在特定位置,销售人员 允许查看更新汽车价格。他们只能看到正在行驶的汽车 分配给他们的 现在,从长远来看,我们可以为销售人员角色创建策略,并基于位置隐藏特定菜单 但是如何处理getCarDetailsObject用户{…}方法呢 在这里,我们将根据UserID销售人员显示列表 如何使用规范来设计它 我对此的理解是:我们可以在这个方法的基础上使用并添加销售人员角色。但它只会限制来自不同角色的其他用户。从这里

如果需要,如何使用带有WSO2 PDP和PIP的XACML覆盖以下场景

在二手车应用中,特别是在特定位置,销售人员 允许查看更新汽车价格。他们只能看到正在行驶的汽车 分配给他们的

现在,从长远来看,我们可以为销售人员角色创建策略,并基于位置隐藏特定菜单

但是如何处理getCarDetailsObject用户{…}方法呢

在这里,我们将根据UserID销售人员显示列表

如何使用规范来设计它


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

您的问题包含两个问题:

我如何为我的政策建模? 如何保护我的应用程序?执行决定 首先,让我们以阿尔法为您的政策建模:

规则:当且仅当汽车指定的销售人员标识符等于请求用户的身份时,销售人员才能查看汽车

在阿尔法中,这变成:

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安全策略和XACML策略管理的角色,除非您正确地记录它们

你可以采取两种方法

使用多决策配置文件-这是XACML 3.0可选配置文件集的一部分,或 使用反向查询方法-这仅适用于Axiomatics。我不确定WSO2是否支持它。 Multiple Decision Profile MDP定义了如何使用单个请求向策略决策点PDP发送写入的多个授权请求。这为您节省了多次往返。您将收到的响应将包含与发送的原始请求中的授权请求一样多的决策。您可以节省运输时间和评估时间。当您知道要保护多少个项目,并且该数字介于1和1000之间,但不大于1000时,请使用MDP。当然,它总是值得一试。您可以在上阅读有关MDP的更多信息。在您的情况下,流程如下所示:

调用getCarDetailsObject用户。 调用底层数据库以检索所有汽车 以MDP方式调用PDP以获取决策所需的所有记录 仅返回您已获得许可证的记录 主要的缺点是,您最终可能会从数据库接收数千条(如果不是数百万条)记录。因此,使用MDP是不现实的

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

爱丽丝能看到123号车吗? 反向查询允许您提问

爱丽丝可以看到哪些车? 响应不是许可或拒绝,而是一个过滤器表达式,如SQL语句,例如

从分配了SP='Alice'的车辆中选择id;
然后,您所要做的就是对数据库使用SQL语句来查询它,并只返回有标题的数据。无论数据库中有多少数据,这都是有效的。您可以通过此找到有关ARQ SQL的更多信息。

您的问题在哪里。皮普进来?谢谢!wso2不支持RQuery我想知道,您是否有PDP级别的原始数据库副本?否则,我们如何才能获得分配给Alice的汽车列表?因为汽车对于应用程序来说是动态的,例如目前分配给用户Alice的10辆汽车。突然,主管在他的列表中又添加了20辆车,这些车将位于应用程序级数据库中。然后,如何在PDP级别的策略中自动分配其他20辆车,直到它也拥有此最新信息。我可能在理解上犯了一些错误。另外,如果你可以把阿尔法编解码器创建的策略放在这里,你可以把这个问题变成另一个SO问题,这样我就可以回答了吗?再次感谢David,我已经把这个问题放在这里了[