3

我正在使用 IS WSO2 对 XACML 进行授权。我能够获得静态资源的授权。但是在粒度化方面我不确定设计。

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

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

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

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

4

1 回答 1

3

您的问题很好,答案将突出 XACML 和外部授权作为一个整体的主要优势。

在 XACML 中,您定义通用的全局规则,关于什么是允许的,什么是不使用的,我称之为高级属性,例如车辆的属性(在您的情况下)或用户的属性(角色、部门……)

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

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

用户的区域和汽车的区域都在应用程序的数据库中维护。这些值是使用 PIP 或策略信息点读取的(详情请参阅此处)。

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

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 流程:

XACML 架构 - 公理

HTH,如果您还有其他问题,请告诉我。您可以在此处下载 ALFA,也可以在此处观看教程

于 2014-12-30T11:43:01.887 回答