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

核心身份 Asp.net 使用 AspNetUserClaims 还是 AspNetRoleClaims?

钱弘壮
2023-03-14

我仍然对所有这些身份的东西感到困惑。

首先,我仍然不清楚角色、政策/声明之间的区别。据我所知,角色是旧的做事方式,是为了向后兼容而保留的,那么这是否意味着AspNetRoleClaims是向后兼容的一部分?

我认为我理解索赔和政策时,当将它们单独考虑时,就像政策基本上是一组必须通过的规则,并赋予更改规则的能力,而不必遍历所有代码和更改角色。

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

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

我生成了身份表

AspNetUsers
AspNetUserRoles
AspNetRoles
AspNetRoleClaims
AspNetUserClaims
AspNetUserLogins

我得到了AspNetUsers表的作用和AspNetUserLogins(如果他们使用像外部登录提供程序一样的话)。

我搞不清楚这两者之间的区别

假设我有这个secenario

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

这一切看起来像什么?我扮演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

然后在我的代码中创建所有不同的“声明类型”,并创建一个策略来查看他们是否说了“CanAddUserToBranch ”,然后创建另一个声明或策略来检查他们在哪个分支中,以确保他们正在尝试向正确的分支添加内容。

编辑

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

共有1个答案

马晓博
2023-03-14
+------------------+------------------+
|      Table       |   Description    |
+------------------+------------------+
| AspNetUsers      | The users.       |
| AspNetRoles      | The roles.       |
| AspNetUserRoles  | Roles of users.  |
| AspNetUserClaims | Claims by users. |
| AspNetRoleClaims | Claims by roles. |
+------------------+------------------+
  • 角色是分配给用户的东西。
    • 例如。简是管理员。
      简的出生日期是1990年10月1日。
      < li >例如,管理员可以访问仪表板。

    如果您发现角色和声明令人困惑,这可能是因为角色是声明的特例,即角色就是声明。

    角色vs政策

    >

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

    • 例如:只有具有管理员角色的用户才能访问仪表板。

    对于基于策略的授权,将执行一些业务逻辑来决定是否应授权资源访问。

      < li >例如:只有40岁以上的管理员才能访问财务数据。

    假设我有这个场景

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

    这里有一种方法:

    2个角色:< code>Admin,< code > TheRoleThatCanAddUsers < br >一个名为< code>Branch的声明,它可以接受分支id(或任何其他用于标识分支的内容)。公司管理员可以使用像< code >“公司范围”或< code>0或< code>-1这样的值。

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

 类似资料:
  • 我正在开发ASP NET核心Web API,对认证方式的选择感到困惑。我曾经应用默认的Asp Net身份验证,但最近我知道了JWT。因此,我几乎像本文中一样实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。但是我不能理解这个JWT的好处。通过简单的Asp Net身份认证,我不关心令牌存储等,我只需要用signI

  • .NET核心和ASP.NET核心到底有什么区别?

  • 在我的ASP.NET核心web api中,我已经按照MS文档中的文章配置了Cors。web api应用程序正在使用windows身份验证(未启用匿名身份验证)。创建Cor的策略,并在< code>startup.cs中添加中间件,如下所示 还应用了每个控制器级别的策略 选项请求越来越未经授权。请求 我见过类似的问题,也尝试过几乎所有的解决方案,但选项请求仍然失败。

  • 我的问题和这个差不多。 ASP。Net Core与EF Core和CosmosDB-身份问题 提供的答案不起作用。这会产生其他问题。当我从升级我的应用程序时,这些错误开始出现。NET Core 3.1 to。净5。降级应用程序使所有错误都消失了。显然,这个问题与efcore 5中引入的对cosmos的乐观并发支持有关。 https://docs.microsoft.com/en-us/ef/cor

  • 我正在使用ASP.NET内核。我正在创建一个基本的WebAPI。我想在出现问题时显示一个JSON错误。 打印屏幕在我的屏幕上显示want I want。唯一的问题是它的发送状态码为200。 我可以通过这样做来解决问题: 真诚的,布莱希特