在基于声明的授权系统中,复合和覆盖有哪些策略?

时间:2017-11-16 01:12:12

标签: authorization claims-based-identity

我们在REST API中构建了一个基于声明的基本授权系统,其中自定义声明提供程序在传入请求上运行,而特定于应用程序的角色映射到" permission"权利要求中。

例如,想象一下具有帐户,用户和角色的应用程序。对于基本帐户,所有者角色映射到"查看帐户"声明和"修改帐户"声明,而助理角色只映射到"查看帐户。"但是,对于高级帐户,所有者和助理都会映射两个声明。

用户Bob在BasicAccount 123上拥有所有者角色,但在PremiumAccount 456上具有 no 角色.User Ann在BasicAccount 123 PreiumAccount 456上具有助理角色。鉴于这些用户和他们的角色,鲍勃将有索赔"查看帐户123"和"修改帐户123",而Ann将拥有索赔"查看帐户123","查看帐户-456"和" ;修改 - 帐户 - 456"

这适用于我们迄今为止必须实施的所有简单方案; API控制器使用自定义属性(这是C#/ .Net)进行注释,指定访问每个端点/方法所需的声明。

所以现在我们需要实现一个帐户的锁定,这样任何人都无法修改它,无论他们的角色如何。问题是,我们使用声明实现这种覆盖逻辑的选择是什么?看起来,作为第一步,我们需要新的声明来表示锁定和解锁帐户的权限,并从适当的角色映射它们。但我不想嵌入"化合物"或者将逻辑覆盖到使用声明的地方 - 所有这些API端点方法都不应该知道锁定状态。我也不想强迫(或依赖)我们添加的每个新声明以了解锁定"覆盖"如权利要求/逻辑。

这是我第一次尝试实施特定于应用程序的声明授权,因此对策略的任何想法或经验都表示赞赏。

请注意,我并不想将整个授权基础架构重新设计为基于XACML或其他内容(如重复问题投票中所述)。我们将在内部进行基于声明的授权。

0 个答案:

没有答案