假设我有一个集合transactions
以及一个政策,如果用户的read access
是user
,那么对于具有角色department
的用户,该集合内的事务会授予| summarize AverageDuration = avg(duration), Failures = sum(Failure) by user_Id, InterestingDimension
与记录中的相同。
问题:如果我访问单个资源,我检查每个资源的访问权限没有问题。但是如果我想枚举/列出整个集合,我需要检查集合中的每个项目都是无效的(特别是如果你的条目数量很高)。
如果PDP可以将信息返回给PEP,那么部门需要过滤条目列表(并且PEP可以将其传递给底层数据存储),效率会更高。
我考虑过对此使用义务,但据我所知,它们不应包含AuthZ相关信息。
那怎么能解决这个问题呢?
答案 0 :(得分:2)
你提出了一个很好的观点。 XACML设计用于我称之为 事务授权 ,即授权特定事务或流程。例如:
挑战在于您想要控制对大量甚至是未知数量的项目的访问。在这种情况下,您(理论上)可以发送大量请求。您甚至可以利用Multiple Decision Profile of XACML来创建请求,例如:
然后,您可以获得与请求中的MDP元素一样多的答案。你甚至可以做一个矩阵,例如
然而,它仍然不能很好地扩展(它可以达到数千但几乎没有数百万)并且它不会在分页场景中工作,并且当你不知道你有多少项目时。它在分页中不起作用,因为想象一下您将检索10个项目(通过分页),然后您将对每个项目进行授权。您冒着在页面上少于10个项目的风险,这会破坏用户体验。
在您的问题中,您提到使用义务和建议。这是一个选择,但你是对的缺点。它在建议中隐藏了authZ语义,这使单个案例变得更难。这就是您的政策将成为
这为政策执行点(PEP)做了大量工作。
那么替代方案是什么?
Axiomatics(其中 - 免责声明 - 我工作的地方)在PDP之上提供了一个新的API,允许您以开放式方式查询策略Reverse Query。这是关于该主题的developer post。
不是发送完整的XACML请求,而是发送部分请求(开放式问题),例如
。请求可以是通用的,也可以是需要的。以下是所有有效请求:
响应将是一组根据必须满足的策略计算的过滤器表达式。
鉴于之前所述的政策
可能的答案是
上述示例中的请求专注于Alice。您可以专注于资源(医疗记录),甚至是行动。你可以选择。
我希望这有帮助, 大卫。