XACML:如何控制对资源中属性的访问

XACML: How to control the access to the properties in a resource

我了解 XACML 可以根据主题、资源、环境和操作等各种类别提供细粒度的资源访问控制。

但是,一旦做出评估并决定获取资源,我们是否可以控制 user/subject 可以访问资源中 fields/properties 的内容?

例如,有一个名为 Customer 的资源具有以下字段。

客户:{姓名、isVip、电话号码}

现在,如果我有一个访问此信息的销售代理,我想只向少数选定的销售代理显示 VIP 客户的电话号码。

这应该是对 GET 客户信息的响应 API:

由普通销售代理致电: {姓名,是贵宾}

被选定的销售代理呼叫: {姓名,isVip,电话号码}

我可以用 XACML 实现吗?如果是,如何?

是的,你可以!

这完全取决于您如何定义资源以及如何为它们编写策略。在您的情况下,您有一个类型为 "Customer" 的对象,并且您有一个类型为 "field" 的对象。 Name、isVip、phoneNumber都是Customer对象的字段。

您可以编写以下策略:

  • 销售代理可以查看同一地区客户的客户对象
  • 如果销售代理被分配给客户,则他们可以查看该客户的电话号码字段

执法将如何运作?您必须看到的是,您可以在进入……和离开的途中进行执法。换句话说,你可以问

  • 销售代理 Alice 可以查看客户记录 #123 吗?
  • 允许

然后应用程序获取记录。当记录通过 PEP 从底层系统返回时,您检查记录,发现您有 3 个部分值得控制访问,然后您询问 PDP:

  • 销售代理 Alice 可以查看客户记录 #123 的第 #1、#2、#3 部分吗?
  • 允许,拒绝,拒绝

顺便说一下,后者是一个多决策请求的例子。您可以阅读有关 MDP 的更多信息 here and here.