【问题标题】:How to deal with deep level granularization with XACML in enterprise application如何在企业应用程序中使用 XACML 处理深度粒度化
【发布时间】:2015-02-21 23:03:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

您的问题很好,答案将突出 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 流程:

HTH,如果您还有其他问题,请告诉我。你可以download ALFA here,也可以watch tutorials here

【讨论】:

  • 首先,非常感谢您的回答。是的!!我虽然 PIP 可能是这样做的一种方式。但我不确定我们最终会得到的设计。
  • 这就像我们想要对我们的应用程序进行基于角色的集中访问,这应该将我们的授权逻辑与我们的应用程序隔离开来,并使我们的应用程序不受授权的影响。现在,如果我们使用您提到的 PIP,请求流程就像 Application->Ideneity server->application database->Identity server->Application。所以,现在我在身份服务器中的 XACML 变得依赖于我的应用程序级数据库。我不确定我们是否能够通过遵循这种设计来获得企业级集中访问控制的真正好处。
  • 很棒的评论。下一步将是拥有一个企业数据模型或字典。它会走很长一段路。顺便说一句,不要忘记接受答案和/或投票。
  • 嗨,大卫,如果可能的话,请用我的 id himanshu.d@ezdi.us 给我发送测试邮件。是的,答案对我有用。非常感谢。
猜你喜欢
  • 2020-05-15
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多