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 部分吗?
- 允许,拒绝,拒绝
我了解 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 部分吗?
- 允许,拒绝,拒绝