假设我有一个集合
transactions
和一个策略,如果用户的 read access
与记录中的相同,则该策略将 user
授予该集合内具有角色 department
的用户的交易。
问题:如果我访问单个资源,则检查每个资源的访问权限没有问题。但是,如果我想枚举/列出整个集合,我需要检查集合中的每个项目,这是效率不高的(特别是如果您的条目数量“高”)。
如果 PDP 可以将条目列表需要由部门过滤的信息返回给 PEP(并且 PEP 可以将其传递到底层数据存储),那么效率会更高。
我考虑过为此使用义务,但据我所知,它们不应包含 AuthZ 相关信息。
那么如何解决这个问题呢?
你提出了一个很好的观点。 XACML 是为我所说的交易授权而设计的,即授权特定的交易或流程。例如:
挑战在于当您想要控制对大量甚至未知数量的项目的访问时。在这种情况下,您(理论上)可以只发送大量请求。您甚至可以利用 XACML 的多重决策配置文件,它允许您创建请求,例如:
然后,您将得到与请求中的 MDP 元素一样多的答案。你甚至可以做一个矩阵,例如
但是,它的扩展性仍然不够好(它可以达到数千,但几乎不会达到数百万),并且在分页场景以及当您不知道有多少项时它无法工作。它在分页中不起作用,因为假设您检索了 10 个将要显示的项目(通过分页),然后您对每一项进行了授权。您面临页面上的项目少于 10 个的风险,这会破坏用户体验。
在您的问题中,您提到了使用义务和建议。这是一个选择,但你对缺点的看法是正确的。它将 authZ 语义隐藏在建议中,这使得单一案例变得更加困难。这就是您的政策将会变成的样子
这给政策执行点(PEP)带来了大量的工作。
那么还有什么选择呢?
Axiomatics(免责声明 - 是我工作的地方)在 PDP 之上提出了一个新的 API,它允许您以开放式方式查询策略,称为“反向查询”。这是关于该主题的开发者帖子。 您不是发送完整的 XACML 请求,而是发送部分请求(开放式问题),例如
Alice 可以看到什么?
会发生什么?
鉴于之前所述的政策
会发生什么?