索赔授权和角色授权之间是否存在根本区别?

Is there a fundamental difference between claims authorization and roles authorization?

VS2013、MVC5

我可能会用错一些术语,因为我是这个主题的新手。

根据我的阅读,我得出结论,声明可用于 身份验证 授权 which are 2 very different concepts。假设这种想法是正确的,我的问题与声明有关,因为它们可能适用于 authorization,而不是 authentication(或 identity? - 将 identity 视为 authentication 的替代概念是否准确?)

Wikipedia article 似乎和我读到的任何其他内容一样简洁(最后一节第一行)声明和角色之间的区别是:

distinction between what the user is/is not and what the user may/may not do

如果我使用声明来确定用户可以做什么或不可以做什么,我看不出这与角色所做的有何不同。 This article 有点暗示它是不同的,但是这个例子对我来说似乎是一样的,声明的例子只是一个更好的角色定义,是吗?

This article suggests 差异不大,但解释似乎暗示了绝对根本的差异,因为它开始在声明中使用一个值。但是除非该值允许声明将角色组合成一个声明,否则它仍然只是一个角色,是吗?而且,如果您在大型应用程序中将复合角色组合成单个声明值,虽然该方案可能更 space 高效,但它以后是否还需要一种方法来解码复合角色?

This previously linked article 声明虽然 MVC5 中有一个数据结构用于声明,但它没有绑定到数据属性,因此使用声明进行授权不需要大量的额外编程或对声明的更复杂引用?

所以这就是让我问 post 标题中的问题的原因,是否存在根本区别?因为如果不是,我不明白为什么我会使用 授权 的声明。

我还没有足够的经验来完全了解如何将声明用于 身份验证 ,但我知道使用第 3 方进行身份验证以及诸如单点登录之类的东西,但这不是我在这个问题上的重点。

你挖得太深了。角色和声明之间没有根本区别。到目前为止,角色作为声明存储在身份验证 cookie 中。您可以非常轻松地创建适用于声明的身份验证属性。在框架中,只有角色周围的代码稍微多一些。当您调用 IPrincipal.IsUserInrole("rolename") 时,框架实际上会检查用户是否拥有类型为 ClaimTypes.Role 且值为 "rolename".

的声明

我研究这些概念有一段时间了,我的结论是声明可以为您提供更精细的身份验证级别。您也可以使用声明作为数据的容器添加到 auth-cookie 上。从这个意义上说,角色非常不灵活。

没有本质区别。声明的优点是它可以包含数据。例如,您可以使用 MaxAllowedOrderSum=1000 声明并将其用于授权订单。

通过角色授权,您将需要发明 Role=PriviledgedManager 并以某种方式获得最大订单数。没有不可能,但更多的实体参与。