Asp.net core Asp.net核心标识是否使用AspNetUserClaims或AspNetRoleClaims?

Asp.net core Asp.net核心标识是否使用AspNetUserClaims或AspNetRoleClaims?,asp.net-core,asp.net-identity,claims-based-identity,role-based,Asp.net Core,Asp.net Identity,Claims Based Identity,Role Based,我仍然对所有这些身份信息感到困惑 首先,我仍然对角色、政策/声明之间的区别感到困惑。从我所读到的角色是旧的做事方式,是为了向后兼容而保留的,那么这是否意味着AspNetRoleClaims是这种向后兼容的一部分呢 我认为我理解索赔和政策时,考虑到他们的个人,就像政策基本上是一套规则,必须通过,并给予改变规则的能力,而不必通过所有的代码和改变角色 这是一个声明,基本上是一个可信的来源为该用户提供担保(即这是他们的年龄,可能来自政府来源) 现在让我困惑的是把它们放在一起 我生成了标识表并查看 Asp

我仍然对所有这些身份信息感到困惑

首先,我仍然对角色、政策/声明之间的区别感到困惑。从我所读到的角色是旧的做事方式,是为了向后兼容而保留的,那么这是否意味着AspNetRoleClaims是这种向后兼容的一部分呢

我认为我理解索赔和政策时,考虑到他们的个人,就像政策基本上是一套规则,必须通过,并给予改变规则的能力,而不必通过所有的代码和改变角色

这是一个声明,基本上是一个可信的来源为该用户提供担保(即这是他们的年龄,可能来自政府来源)

现在让我困惑的是把它们放在一起

我生成了标识表并查看

AspNetUsers
AspNetUserRoles
AspNetRoles
AspNetRoleClaims
AspNetUserClaims
AspNetUserLogins
我得到了AspNetUsers表的功能和AspNetUserLogins(如果它们像外部登录提供者一样使用,则似乎是这样)

我对AspNetRoleClaims和AspNetUserClaims之间的区别感到困惑。我是只使用AspNetUserClaims还是使用一切

比如说我有这件西塞纳里奥

我有一家公司,它有许多分支机构,在每个分支机构中,他们都将是该分支机构的管理员,他们对该分支机构拥有完全的权力,除了在另一个分支机构之外,什么都不能做。在公司层面,将有一名管理员,他可以在公司层面和任何分支机构做任何事情。最后,我在分公司有一个人,他可以添加新员工

这一切看起来像什么?我扮演3个角色吗

CompanyAdmin
BranchAdmin
AddUsersAtBranchLevel (or is this some sort of claim??)
What do the tables look like? Is there anything going to be in AspNetRoleClaims? AspNetUserClaims?
现在我可以制定一个策略来检查用户是否是分支管理员,以及他们是否正在尝试编辑其分支

还是我只是忘记了所有的角色,在AspNetUserClaims中

User1   CanAddUserToBranch true
User1 CanDeleteUserBranch true
User1 CanAddUserToCompany true
然后,在我的代码中,创建所有不同的“claimtype”,并创建一个polciy,查看他们是否说“CanAddUserToBranch”,然后创建另一个声明或策略来检查他们所在的分支,以确保他们试图向正确的分支添加内容

编辑

您认为我需要使用基于资源的授权吗

+------------------+------------------+
|      Table       |   Description    |
+------------------+------------------+
| AspNetUsers      | The users.       |
| AspNetRoles      | The roles.       |
| AspNetUserRoles  | Roles of users.  |
| AspNetUserClaims | Claims by users. |
| AspNetRoleClaims | Claims by roles. |
+------------------+------------------+
  • 角色是分配给用户的东西。
    • 简是个管理员
  • 声明是由用户声明的内容。
    • 简的出生日期是1990年10月1日
  • 角色声明是角色声明的声明。
    • 管理员可以访问仪表板
如果您发现角色和声明混淆,可能是因为角色是声明的特例,即角色是声明

角色与政策

  • 对于基于角色的授权,授权系统检查用户是否已被分配访问给定资源所需的角色

    • 只有具有管理员角色的用户才能访问仪表板
  • 对于基于策略的授权,执行一些业务逻辑来决定是否应该授权资源访问

    • 只有年龄在40岁以上的管理员才能访问财务数据

假设我有这个场景

我有一家公司,它有许多分支机构,在每个分支机构中,他们都将是该分支机构的管理员,他们对该分支机构拥有完全的权力,除了在另一个分支机构之外,什么都不能做。在公司层面,将有一名管理员,他可以在公司层面和任何分支机构做任何事情。最后,我在分公司有一个人,他可以添加新员工

这里有一种方法:

2个角色:
管理员
可以添加用户的角色

一个名为
Branch
的声明
,它可以获取分支id(或任何其他标识分支的内容)。公司管理员可以使用类似于
“公司范围”
0
-1
的值


现在创建一个策略,检查角色和分支声明,并决定是否应该授权用户。

那么在您的场景中,您是否使用角色声明?我的理解是,您要么使用角色/角色声明,要么仅使用用户声明。你是怎么写的,你似乎用了所有的?@chobo2不,我没有用过roleclaims。当声明附加到角色而不是用户时,Roleclaims是有意义的。此外,根据需要,您可以将它们一起使用。然后我有点困惑,您创建了两个角色,分支是用户声明?是的,分支是有意义的,但是为什么您选择创建角色,而不是只创建一大堆声明?就像在您的模型中一样,您需要添加RoleTheCaneditUser、RoleThatCandeletUsers。或者牺牲这种灵活性,如果一切都是声明,那么你就不会有这个问题。youtube教程显示了将声明与角色并排使用:你在“我仍然对所有这些身份信息感到困惑……”上投了我一票。然而,你的问题是完美的。正如您所说,根据一些可靠的消息来源,我们不应该再使用角色(简而言之,角色有2.1.Bug)。然而,下面唯一的答案是推荐角色。大多数问题,比如你的问题,都没有答案,或者再次使用角色。。。或者旧版本的Identity/Core/etc中的过时代码……或者搭建出Identity并对其进行定制。我一整天都在看msdn等视频、阅读文章和博客,但答案仍然不清楚。@SumNone我非常感谢您提到的可靠来源的链接。。。如果它能完成任务,那么使用角色没有错。角色是主张。您还可以使用IdentityCore,在
AspNetUserClaims
表中创建自己的角色声明。选择解决问题最好的方法!(尽管如此,请分享链接,因为我还没有听到关于不应使用角色的建议。)问题是,如果你不了解其中一种解决方案,就很难选择哪种解决方案最好。经过大量研究,我有点放弃了,只是做了“角色”(没有角色声明或任何声明)。需要什么的需求允许我只使用角色