基于声明与基于权限的授权

信息安全 授权
2021-08-19 08:08:26

所以我了解角色与权限。我也了解角色与主张。在这两种情况下,声明和权限都是细粒度的,通常是按功能或业务操作,例如 AddPerson 权限。我一直在学习基于声明的授权以及展示它如何“更好”的示例,并且通常将其与基于角色的授权进行比较。显然它更好,因为这是使用角色的错误方式,因为您应该使用权限作为操作和角色之间的映射。

基于声明和基于许可的授权有什么区别? (注意权限与角色不同,所以这不是 Role vs Claim 问题的重复)

在这两种情况下,您似乎都有细粒度的权限/声明。到目前为止,我看到的关于声明的具体示例非常接近我将概念化为权限的内容。我在声明中看到的一个示例是 Add/Person 声明,当然我会拥有与 AddPerson 权限类似的权限。我发现通常我有一个具有单个入口点的业务层,并且每个功能/入口点都需要权限。在这两种情况下,许可/声明的合理性是随着时间的推移,特定身份或角色可能会在允许做的事情方面发生变化。而且,如果您在应用程序中对该角色进行了硬编码检查,则必须更改代码以适应,但如果您使用了声明/权限,那么更改与角色关联的内容只是一个管理问题。

我问这个问题听起来不像是在挑战索赔的想法。相反,我知道如果我更清楚地了解是什么使它们与权限不同,我可能会对声明有更好的概念。

2个回答

声明比许可更具任意性。声明是“蓝眼睛”,而“AddPerson”是许可。它是来自身份提供者的断言,即关于身份的给定特征(或更准确地说,属性)是真实的。

您可以根据声明或特征确定许可,因为“所有蓝眼睛的人都可以做 xyz”,而许可则明确指出您可以做什么和不可以做什么。在获得许可的情况下,您不能(轻松地)通过“任何可以做 xyz 的人都有蓝眼睛”来确定一个特征。

话虽如此,许可就是一种要求。恰好身份提供者声称身份具有有权做任何事情的特征。

简而言之:声明是关于身份的任意属性,而许可是声明的做某事的权利。

有关SAML,请参见http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language ,它提供了基于声明的授权方式。正如史蒂夫所说,如果服务提供商选择,声明可以直接映射到特定的权限,或者也可以映射到角色身份提供者的声明如何映射到服务提供者中的权限/角色完全取决于服务提供者。身份提供者简单地断言声明对于经过身份验证的用户是真实的,服务提供者接受这些声明并决定它们如何与服务中的权限和/或角色相关联。声明是可信的陈述关于来自身份提供者的用户,并且单独与权限或角色无关,直到服务提供者决定声明的含义。