当前位置: 首页 > 知识库问答 >
问题:

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

商德泽
2023-03-14

VS2013,MVC5

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

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

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

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

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

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

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

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

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

共有2个答案

丁光华
2023-03-14

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

通过角色授权,您将需要发明角色=特权经理,并以某种方式获得订单的最大总和。没有什么不可能的,但涉及更多的实体。

权浩邈
2023-03-14

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

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

 类似资料:
  • Using a delegation key The collaborator can now push to the repository using Docker Content Trust. Docker will automatically choose and pick the right key for the targets/release role. Edit the file o

  • Importing a delegation certificate As a repository owner: Add the delegation key to the repository using the targets/releases path, as this is what Docker searches for when signing an image (first tar

  • Generating a delegation key Make sure you’re using OpenSSL 1.0.2+, otherwise the keys will be signed with SHA1, which Notary will refuse to import (invalid SHA1 signature algorithm): ❯ brew install op

  • 我正在试图理解一些Spring Security代码。我也是Spring Security的新手,我想我在这里遗漏了一些基本的东西。 谢谢,雷。

  • Delegation roles Delegation roles allows assigning signing privileges to other repository collaborators. This is particularly interesting in organizations that have multiple people working on the same

  • spring安全中有一些概念和实现,例如接口,用于获取授权/控制访问的权限。 我希望允许的操作,如createSubUsers或deleteAccounts,我允许管理员(使用角色)执行这些操作。 当我在网上看到教程/演示时,我感到很困惑。我试着把我读到的东西联系起来,但我认为我们可以互换地对待这两者。 我看到使用字符串?我绝对是在理解上做错了。这些在spring安全概念上是什么? 如何将用户的角