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

时间:2015-02-27 18:37:51

标签: asp.net-mvc vb.net asp.net-identity claims-based-identity

VS2013,MVC5

我可能会得到一些错误的术语,因为我对此主题不熟悉。

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

Wikipedia article看起来像我读到的任何其他内容一样简洁(第1行最后一部分)声明和角色之间的区别是:

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

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

This article suggests之间的差别不大,但解释似乎暗示了一个绝对的根本区别,因为它开始在索赔中使用一个值。但除非价值允许声称将角色合并为单一声明,否则它仍然只是一个角色,是吗?如果您在大型应用程序中将组合角色复合到一个索赔值中,而该方案可能更节省空间,那么它还需要一种方法来解码合成角色吗?

This previously linked article表示虽然MVC5中有一个数据结构用于声明,但它与数据属性无关,因此不会使用声明授权需要大量额外编程或更复杂提到索赔?

那么是什么让我在帖子的标题中提出问题,是否存在根本区别?因为如果没有,我不明白为什么我会使用授权的声明。

我还没有足够的经验来完全理解声明如何用于身份验证,但我明白了使用第三方进行身份验证以及使用单身内容等方面的重要价值登录,但这不是我在这个问题上的重点。

2 个答案:

答案 0 :(得分:2)

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

我已经玩了一段时间这些概念,我的结论是声明可以为您提供更精细的身份验证级别。您还可以将声明用作容器,以便在auth-cookie上添加数据。在这个意义上,角色非常不灵活。

答案 1 :(得分:1)

没有根本区别。声明的优点是它可能包含数据。例如,您可能声称MaxAllowedOrderSum = 1000并使用它来授权订单。

使用角色授权,您需要创建Role = PriviledgedManager并以某种方式获得最大的订单总和。没有什么不可能,但更多的实体参与其中。