我使用IS WSO2进行XACML授权。我能够获得静态资源的授权。但在制粒时,我不确定设计。
示例:如果我有像getCarDetails(对象用户)这样的方法,我应该只获得分配给这个特定用户的那些汽车,那么如何处理这个与XACMl?
Wso2为PIP提供支持,我们可以使用可以从数据库中获取数据的自定义类。但我不确定我们是应该在PDP端复制原始数据库还是将原始数据库提供给PIP以获得实时数据的更新。
因为汽车对于应用来说是动态的,例如。目前有10辆汽车分配给用户Alice。突然主管在他的列表中添加了20多辆汽车,这将在应用程序级数据库中。那么这些其他20辆汽车将如何在PDP级别的政策中自动分配,直到它还拥有最新信息。
我可能在理解上犯了一些错误。但我不知道如何处理这个问题,因为在整个应用程序中我们可以有很多这种复杂的场景,有时我们会从4个或5个表中获取一个用户的数据,然后如何处理这个场景?
答案 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流程: