ASP .NET Identity中的要求是什么


178

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

我所看到的,有一个AspNetUserLogins表,其中包含UserIdLoginProviderProviderKey

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

Answers:


214

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

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

基于角色的安全性

用户被分配到一个或多个角色,通过该角色用户可以获得访问权限。同样,通过为用户分配角色,用户可以立即获得为该角色定义的所有访问权限。

基于声明的安全性

基于声明的身份是一组声明。声明是一个实体(用户或另一个应用程序)关于自身的声明,它只是一个声明。例如,声明列表可以包含用户名,用户电子邮件,用户年龄,用户对某项操作的授权。在基于角色的安全性中,用户将凭据直接提供给应用程序。在基于声明的模型中,用户向应用程序提供声明而不是凭据。为了使声明具有实用价值,它必须来自应用程序信任的实体。

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

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

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

当您处于不使用基于角色的安全性的情况下,而选择使用基于声明的安全性时,则需要利用AspNetUserClaims表。有关如何在ASP.NET Identity中使用声明的信息,请参见下面的链接以获取更多信息。

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

更新资料

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

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

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

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

有关更多信息,请访问http://msdn.microsoft.com/zh-cn/library/ff359101.aspx


6
谢谢您的回答,但我仍然不明白,我什么时候必须使用基于角色的安全性以及何时基于声明?你能写几个例子吗?
Maxim Zhukov 2014年

1
@ FSou1,实际上并没有使用基于角色或基于声明的方法的情况。请参阅我更新的答案以更清楚。

The user presents the credentials to the issuing authority that the RP application trusts.您可以用作此授权人/发行人吗?一些例子会很好。我在msdn网站(您提供的链接)上用红色标记了文章,但它们仅列出了一个示例:ADFS,还有其他选择吗?在任何地方都找不到此信息。:(
Jo Smo

1
《基于声明的身份和访问控制指南》提供了基于声明与基于角色的访问控制(RBAC)方法的完整说明。整本书免费提供,可通过MS下载在线获得。 goodreads.com/book/show/…–
克里斯·迈洛纳斯

2
可以从Microsoft免费下载@ChrisMylonas提到的RBAC微软免费书籍,网址为:microsoft.com/en-us/download/details.aspx?
id=28362

19

只是为了补充@Lin上面所说的内容。我专门指的是这个问题:

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

考虑一种情况,如果您有一个拥有技术人员和经理的时钟系统。在每周结束时,技术人员必须安排带有时钟信息的报告,以显示该周工匠的工作时间,并由工资单合并和使用。在提交最终报告之前,通常必须对此类系统进行修正或更正,因为您不想多付或少付您的员工。您可以Role-Based通过创建Manager Role和来为经理和技术人员使用一种方法Technician Role。但是,这Manager Role是一种能够访问和编辑工匠时钟信息的功能。另一方面,您可以Technician Role没有访问这些信息的能力。但这是有趣的部分;经理可以提出索赔,并允许技术人员访问时钟系统并进行报告。因此,可以仅针对未经编辑的访问提出索赔,也可以使用访问和编辑功能提出索赔。

更像是说,嗯,默认情况下,作为管理员,我可以访问一些我的技术人员无法访问的信息。但是我不总是在办公室吗?我该怎么办,这样即使我不在身边,他仍然可以继续工作?为了解决这个问题,系统可以具有管理者可以为人们创建索赔的功能,而无需访问某些特定信息。我们经常在我们的ERP系统中到处看到这些。没有访问某些模块的用户,当他们被提升时,他们将授予ERP系统的更多模块许可,有时保持相同的用户角色。

您可以考虑使用以下示例来进一步了解声明和角色。


1

ASP.Net身份验证有两种类型的身份验证。

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

您可以使用它们之一,也可以同时使用两者。定义明确的事物时,请使用基于角色的事物。例如,您创建了两个角色老师和学生。只有老师可以添加科目。因此,您将教师角色分配给了您希望有权添加主题的那些用户。

基于索赔的方式更加灵活。假设您有一个要求,一些学生也可以添加科目。在这种情况下,您必须再创建一个可以成为学生并可以添加主题的角色。但是,如果您使用基于声明的方法,这将非常容易。只需创建诸如addSubject之类的声明,并将其分配给您要访问以添加aubject的任何用户。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.