在ASP .NET身份声明是什么

谁能解释一下,索赔机制在新的ASP。NET身份核心?

正如我所看到的,有一个AspNetUserLogins表,它包含UserIdLoginProviderProviderKey

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

107234 次浏览

索赔机制在新的ASP中意味着什么?NET身份核心?

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

基于角色的安全性

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

声明的安全

基于声明的标识是声明的集合。声明是一个实体(用户或另一个应用程序)所做的声明 它本身只是一种说法。例如,索赔列表可以包含用户的姓名、用户的电子邮件、用户的年龄、用户对某个操作的授权。 在基于角色的安全性中,用户直接向应用程序提供凭据。在索赔中 模型中,用户向应用程序提供声明,而不是凭证。要求有实际的 值,它必须来自应用程序信任的实体

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

  1. 用户请求操作。依赖方(RP)应用程序请求
  2. 用户将凭据提交给RP应用程序信任的颁发机构。
  3. 在对用户的令牌进行身份验证之后,颁发机构发出带有声明的签名令牌 李凭证。< / >
  4. 用户向RP应用程序提供令牌。应用程序验证令牌 签名,提取索赔,并基于索赔,接受或拒绝 李的要求。< / >
但是,我仍然不能理解和找到任何信息,当数据 添加到AspNetUserClaims和什么情况下使用这个表?< / p >

当您不使用基于角色的安全性,而选择使用基于声明的安全性时 安全性方面,您需要利用AspNetUserClaims表。 关于如何在ASP中使用索赔。

. NET身份,参见下面的链接了解更多信息

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

更新

什么时候我必须使用基于角色的安全性,什么时候基于声明? 你能写几个例子吗?< / p >

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

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

有时候不需要声明。这是一个重要的免责声明。 拥有大量内部应用程序的公司可以使用Integrated 实现Windows身份验证所提供的许多好处 索赔。Active Directory在存储用户身份方面做得很好, 因为Kerberos是Windows的一部分,所以您的应用程序不是 必须包含许多身份验证逻辑。只要每一个 您构建的应用程序可以使用集成Windows身份验证 可能已经到达你的身份乌托邦了。然而,有很多 为什么你可能需要Windows以外的东西 身份验证。您可能使用面向web的应用程序 被没有你的Windows域帐户的人攻击。另一个 原因可能是你的公司和另一家公司合并了 你在跨两个Windows森林进行身份验证时遇到了麻烦 不要(也可能永远不会)建立信任关系。也许你想要 与其他公司共享身份。微软网络框架 应用程序或需要在应用程序之间共享标识 在不同的平台上运行(例如,Macintosh)。这些都是 在一些情况下,基于声明的身份可能是正确的

更多信息,请访问http://msdn.microsoft.com/en-us/library/ff359101.aspx

只是补充一下@Lin上面所说的。我具体指的是以下问题:

什么时候我必须使用基于角色的安全性,什么时候基于声明? 你能写几个例子吗?< / p >

我不得不在这个答案中添加更多信息,这是因为我没有清楚地说明基于声明的认证模型和基于角色的认证模型之间的区别。根据微软文档中展示和记录的经验和概念本身的性质,这两个授权模型经常一起使用,下面的示例3说明了它们经常一起使用的示例。下面我们来详细讨论一下这个话题:

因为授权:

需要注意的重要一点是,与基于角色的授权相比,基于声明的授权本质上是受第三方约束的。声明是第三方应用程序提供给你(你的应用程序)的描述用户的信息。该信息可以是任何类型的数据。让我们举个例子:

示例1:

假设你有一个用于混合歌曲的软件应用程序。这个应用程序基本上使用来自Spotify或YouTube音乐平台的歌曲,但它的构建方式是它可以完全访问这些平台的音乐库。但这款应用不需要你用Spotify或谷歌账户登录,你基本上只需要用电子邮件和密码注册就可以了。但在你上网后,要使用Spotify或YouTube音乐,你需要输入创建sportify或YouTube音乐帐户时使用的电子邮件地址。然后应用程序(通过web服务)从相应的第三方应用程序请求你的订阅账号,并将其存储为索赔。因此,每当你在线尝试访问音乐时,应用程序会使用已注册的索赔策略来检查你是否有订阅帐户,然后允许访问。这样做的好处是,索赔要求存储了诸如Issuer(您存储索赔要求的来源)等信息。就是这样。您使用了第三方提供的声明subscriotionAccountNumber,它在第三方方面描述了您。显然,这不是开发这类应用的最佳模式,但作为一个例子,它已经足够好了。您正在根据从另一个第三方应用程序声明的关于用户的一些信息对用户进行授权。

基于角色的授权:

这个已经很清楚了。简单地说,您仅根据用户的角色(Role)向其授予访问权限。

示例2:

想象一个有多个不同职位用户的组织应用程序。您可以根据用户的职位为其分配角色,并根据用户的角色授予访问不同信息的权限。经理、所有者、员工……基本上不是所有员工都能访问经理和所有者能访问的所有内容。这适用于管理者和所有者。管理人员无权访问仅属于所有者的一些信息。就是这么简单。

把它们放在一起:

在像ERP系统这样的应用程序中,声明和角色一起使用来构建复杂的授权模型。我总是说,当前的身份框架是如此完整,通常你不需要不必要的扩展来破坏现有的模型,显然需求可能会有所不同,有时打破模型可能是唯一的选择。当角色和声明一起使用时,声明充当权限。这就是为什么在模型中有RoleClaimUserClaim表。这允许您将授权扩展到角色本身之外。当声明与角色一起使用时,它们仅提供执行某些操作的访问。

示例3:

考虑这样一个案例,您有一个时钟系统,其中有一个技术人员和一个经理。在每周结束时,技术人员必须安排带有计时信息的报告,显示工匠在该周工作的小时数,这些信息被工资单合并并使用。这样的系统通常必须在提交最终报告之前进行修改或更正,因为你不想给员工支付过高或过低的工资。通过创建Manager RoleTechnician Role,可以为Manager和技术员使用Role-Based方法。但是Manager Role具有访问和编辑工匠的打卡信息的能力。另一方面,你可以拥有Technician Role,但没有这些能力来访问该信息。但有趣的是;经理可以提出索赔,并允许技术人员访问打卡系统并制作报告。因此,声明可以只针对访问而不进行编辑,也可以具有访问和编辑功能。记住,只有你的应用程序理解你的声明的含义。它们可以被命名为任何东西,GrantWriteAccessGrantReadAccess等等,没有什么可以限制你。将声明预定义为权限之后,您所需要做的就是将该声明与用户关联。在这种情况下,技术人员将GrantWriteAccess GrantReadAccess都添加到他们的UserClaim表中。

这更像是在说,默认情况下,作为经理,我可以访问一些技术人员无法访问的信息。但我不是总在办公室?我怎样做才能使他在我不在的时候也能继续工作呢?为了解决这个问题,系统可以提供管理员为无法访问某些特定信息的人创建声明(权限)的功能。我们经常在我们的ERP系统中随处可见。一个没有访问某些模块的用户,当他们升职后,他们被赋予ERP系统更多模块的权限,有时保持相同的用户角色,只是打开了一些权限。

在ASP中有两种类型的身份验证。净的身份。

  1. 基于角色的
  2. 基于索赔

您可以同时使用其中一个或两个。当您有非常明确的东西时,使用基于角色的方法。例如,您创建了教师和学生两个角色。只有老师才能加科目。因此,您将教师角色分配给那些您希望访问其添加主题的用户。

基于索赔更灵活。假设你有一个要求,一些学生也可以添加科目。在这种情况下,您必须创建一个可以是学生和访问添加主题的角色。但如果你使用的是基于声明的,那就很容易了。只需创建像addSubject这样的声明,并将其分配给任何你想访问添加aubject的用户。

下面是来自ASP。网络文档的一个非常简单的解释:

创建身份时,可以向其分配一个或多个由受信任方发布的声明。声明是一个名称-值对,表示主题是什么,而不是主题可以做什么。例如,你可能有一个驾驶执照,由当地驾驶执照机构颁发。你的驾照上有你的出生日期。在本例中,索赔名称将是出生日期,索赔值将是您的出生日期,例如1970年6月8日,而签发方将是驾驶执照颁发机构。基于声明的授权,简单来说,就是检查声明的值,并允许基于该值访问资源。

接着,它给出了一个几乎所有人都能理解的例子:

例如,如果你想进入一个夜总会,授权过程可能是: 在允许你进入之前,门卫会评估你的出生日期索赔的价值,以及他们是否信任发证机构(驾驶执照机构)

所以要回答什么时候应该使用基于声明的安全性?这个问题,答案是当不容易让人们扮演明确的角色时。例如,在夜总会场景中,很难将客户放入角色中,因此您使用基于索赔的访问控制,该访问控制基于他们的ID(例如驾驶执照)确认的年龄。然而,在相同的夜总会场景中,您可以使用基于角色的安全性来控制谁可以访问哪些房间(例如,对“仅限员工”使用钥匙卡;房间)。显然您可以混合使用基于声明和基于角色的安全性取决于需要。