小编典典

ASP .NET Identity 中的声明是什么

all

有人可以解释一下,新的 ASP.NET Identity Core 中的声明机制意味着什么?

如我所见,有一个AspNetUserLogins表,其中包含UserId,LoginProviderProviderKey

但是,我仍然无法理解或找到有关何时将数据添加到AspNetUserClaims表中以及该表用于什么情况的任何信息?


阅读 98

收藏
2022-06-25

共1个答案

小编典典

新的 ASP.NET Identity Core 中的声明机制意味着什么?

有两种基于角色和声明的常见授权方法。

基于角色的安全性

用户被分配到一个或多个角色,用户通过这些角色获得访问权限。此外,通过将用户分配给角色,用户会立即获得为该角色定义的所有访问权限。

基于声明的安全性

基于声明的身份是声明的集合。声明是一个实体(用户或其他应用程序)对自己所做的声明,它只是一个声明。例如,声明列表可以具有用户的姓名、用户的电子邮件、用户的年龄、用户对操作的授权。在基于角色的安全性中,用户直接向应用程序提供凭据。在基于声明的模型中,用户向应用程序提供声明而不是凭据。对于具有实际价值的声明,它必须来自应用程序信任的实体。

以下步骤说明了在基于声明的安全模型中发生的顺序:

  1. 用户请求一个动作。依赖方 (RP) 应用程序请求令牌。
  2. 用户将凭证提交给 RP 应用程序信任的颁发机构。
  3. 颁发机构在对用户的凭据进行身份验证后,颁发带有声明的签名令牌。
  4. 用户将令牌呈现给 RP 应用程序。应用程序验证令牌签名,提取声明,并根据声明接受或拒绝请求。

但是,当数据添加到 AspNetUserClaims 以及该表用于什么情况时,我仍然无法理解和找到任何信息?

当您处于未使用基于角色的安全性的情况下,并且您选择使用基于声明的安全性时,您将需要使用 AspNetUserClaims 表。有关如何在 ASP.NET
标识中使用声明,请参阅下面的链接以获取更多信息。

http://kevin-junghans.blogspot.com/2013/12/using-claims-in-aspnet-
identity.html

更新

我什么时候必须使用基于角色的安全性以及何时使用基于声明的安全性?你能写几个例子吗?

没有一个非常明确的情况,您会或不会使用基于角色或基于声明的安全性,而不是使用 A 而不是 B 的情况。

但是,基于声明的访问控制允许将授权规则与核心业务逻辑更好地分离。当授权规则发生变化时,核心业务逻辑不受影响。在某些情况下,您可能更喜欢使用基于声明的方法。

有时不需要索赔。这是一个重要的免责声明。拥有大量内部应用程序的公司可以使用集成 Windows 身份验证来实现声明提供的许多好处。Active
Directory 在存储用户身份方面做得很好,而且因为 Kerberos 是 Windows
的一部分,所以您的应用程序不必包含太多身份验证逻辑。只要您构建的每个应用程序都可以使用集成 Windows
身份验证,您可能已经达到了您的身份乌托邦。但是,您可能需要 Windows 身份验证以外的其他内容的原因有很多。您可能拥有在您的 Windows
域中没有帐户的人使用的面向 Web 的应用程序。另一个原因可能是您的公司已与另一家公司合并,而您 在没有(并且可能永远不会)有信任关系的两个
Windows 林之间进行身份验证时遇到问题。也许您想与拥有非 .NET Framework 应用程序的另一家公司共享身份,或者您需要在不同平台(例如
Macintosh)上运行的应用程序之间共享身份。这些只是基于声明的身份可以成为您正确选择的几种情况。

有关详细信息,请访问http://msdn.microsoft.com/en-
us/library/ff359101.aspx

2022-06-25