索赔授权和角色授权之间有根本区别吗



VS2013,MVC5

我可能会弄错一些术语,因为我对这个话题还不熟悉。

我所读到的内容使我得出结论,声明可以用于身份验证授权,这是两个非常不同的概念。假设这种想法是正确的,我的问题与索赔有关,因为它们可能适用于授权,而不是身份验证(或标识?-将识别视为认证的替代概念准确吗?)

维基百科上的这篇文章似乎和我读到的其他文章一样简洁,它说(最后一节第1行)声明和角色之间的区别是:

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

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

这篇文章表明没有什么区别,但解释似乎表明了一个绝对根本的区别,因为它开始在索赔中使用一个值。但是,除非该值允许声明将角色组合为一个声明,否则它仍然只是一个角色,是吗?如果在大型应用程序中将角色组合为单个声明值,虽然该方案可能更节省空间,但它不是也需要一种稍后解码组合角色的方法吗?

这篇先前链接的文章指出,虽然MVC5中有一个声明的数据结构,但它与数据属性无关,所以使用声明进行授权难道不需要大量额外的编程或更复杂的声明引用吗?

这就是我在帖子标题中提出的问题,有根本的区别吗?因为如果没有,我不明白为什么要使用授权声明

我还没有足够的经验来完全了解索赔是如何用于身份验证的,但我知道使用第三方进行身份验证以及单点登录等功能都有很大的价值,但这不是我在这个问题上的重点。

你挖得太深了。角色和主张之间没有根本区别。到了将角色作为声明存储在身份验证cookie中的程度。您可以很容易地创建用于声明的身份验证属性。在框架中,只有角色的代码稍微多一些。当您调用IPrincipal.IsUserInrole("rolename")时,框架实际上会检查用户是否具有值为"rolename"的类型为ClaimTypes.Role的声明。

我已经使用这些概念有一段时间了,我的想法是,声明可以为您提供更精细的身份验证级别。此外,您还可以将声明用作数据的容器,以添加到authcookie中。从这个意义上讲,角色是相当不灵活的。

没有根本区别。索赔的优点是它可以包含数据。例如,您可能拥有MaxAllowedOrderSum=1000的索赔,并将其用于授权订单。

有了角色授权,你需要发明role=PriviledgedManager,并以某种方式获得最大订单总额。没有什么是不可能的,但更多的实体参与其中。

最新更新