如何在企业应用中用XACML处理深层次粒化

时间:2014-12-23 19:11:35

标签: wso2 access-control xacml access-rights xacml3

我使用IS WSO2进行XACML授权。我能够获得静态资源的授权。但在制粒时,我不确定设计。

示例:如果我有像getCarDetails(对象用户)这样的方法,我应该只获得分配给这个特定用户的那些汽车,那么如何处理这个与XACMl?

Wso2为PIP提供支持,我们可以使用可以从数据库中获取数据的自定义类。但我不确定我们是应该在PDP端复制原始数据库还是将原始数据库提供给PIP以获得实时数据的更新。

因为汽车对于应用来说是动态的,例如。目前有10辆汽车分配给用户Alice。突然主管在他的列表中添加了20多辆汽车,这将在应用程序级数据库中。那么这些其他20辆汽车将如何在PDP级别的政策中自动分配,直到它还拥有最新信息。

我可能在理解上犯了一些错误。但我不知道如何处理这个问题,因为在整个应用程序中我们可以有很多这种复杂的场景,有时我们会从4个或5个表中获取一个用户的数据,然后如何处理这个场景?

1 个答案:

答案 0 :(得分:3)

您的问题很棒,答案将突出XACML和外部授权的主要优势。

在XACML中,您可以定义通用的全局规则,包括允许的内容和不使用的内容,例如我称之为高级属性的内容,例如:车辆(在您的情况下)或用户(角色,部门......)的属性

例如,一个简单的规则可能是(使用ALFA语法):

policy viewCars{
    target clause actionId=="view" and resourceType=="car"
    apply firstApplicable
    rule allowSameRegion{
        permit
        condition user.region==car.region
    }
}

用户的区域和汽车的区域都维护在应用程序的数据库中。使用PIP或策略信息点(详细信息here)读取值。

在您的示例中,您谈到直接分配,即用户已直接分配给车辆。在这种情况下,规则将成为:

policy viewCars{
    target clause actionId=="view" and resourceType=="car"
    apply firstApplicable
    rule allowAssignedVehicle{
        permit
        condition user.employeeId==car.assignedUser
    }
}

这意味着分配的用户信息必须保存在应用程序数据库,CSV文件,Web服务或其他信息源中。这意味着从管理角度来看,管理员可以从用户指定的列表中添加/删除车辆(或者反过来:从车辆的指定用户列表中添加/删除已分配的用户)。

XACML规则本身不会改变。如果主管在员工列表中添加20多辆汽车(在应用程序级数据库中维护),则PDP将能够通过PIP使用该信息,并相应地授予或拒绝访问。

XACML的主要好处是你可以添加第二条规则,说明主管可以看到他/她被分配到的汽车(正常规则)以及分配给他/她下属的汽车(新的代理委托规则)。

此图摘自Axiomatics博客,总结了XACML流程:

The XACML Architecture - Axiomatics

HTH,如果您有其他问题,请与我们联系。您可以download ALFA herewatch tutorials here