【问题标题】:ASP.net core identity 2.0: proper way to use claims identity with db lookup?ASP.net 核心身份 2.0:使用声明身份和数据库查找的正确方法?
【发布时间】:2018-06-23 10:27:39
【问题描述】:

我对基于声明的身份概念不熟悉,所以如果问题不清楚,请告诉我。

我有一个派生的用户集合,它与“组织”集合有关。用户可以是相关组织的管理员。

我正在尝试构建具有 [IsAdminForThisOrg] 属性的能力,该属性将适用于以下路线:

.../api/Organizations/1/UpdateData

首先,我正在考虑“角色”与“声明”。如果您是管理员,则角色似乎更合适,句号(不考虑实际上您的管理员权限仅适用于特定组织的事实)。

然后,阅读更多内容,似乎声明非常适合我想要完成的工作。我的想法是,在登录时,我将查找用户是管理员的所有组织,然后使用这些值的 string.concat 设置声明。然后,我可以围绕此声明制定政策。

问题 1

我对此的总体方法听起来合理吗?

问题 2

添加声明通常发生在用户登录时是否正确?为什么这个官方文档https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims 没有提到添加声明?如果您不添加声明,这有什么用?

问题 3

用户登录时添加声明的正确方法是什么?我做了一些挖掘,并在我自己的派生 UserClaimsPrincipalFactory 中覆盖了 GenerateClaimsAsync 。它似乎正在工作。但我遇到的问题是:

protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)

我传入了一个用户对象,但我需要导航到相关数据。用户对组织有一个集合导航属性,但由于我相信 EF 加载的工作方式,它尚未填充。我不知道如何指定急切或显式加载,因为我没有上下文,而且这似乎已经为我完成了。 (我不知道是什么将用户对象传递给此方法。0 也许有一种完全不同的方式来填充声明,这是更可取的。关于此方法的文档似乎很少,所以也许这不是去吧。

【问题讨论】:

    标签: entity-framework asp.net-identity entity-framework-core claims-based-identity asp.net-core-identity


    【解决方案1】:

    您可能已经想出了一些办法,但这是我的想法:您可以将 dbcontext 作为您自己的 UserClaimsPrincipalFactory 的构造函数参数(依赖注入),然后根据您获得的用户查询所需的组织。

    【讨论】:

      猜你喜欢
      • 2019-11-09
      • 2017-11-12
      • 2019-03-24
      • 2021-06-11
      • 2020-08-04
      • 2018-08-31
      • 2016-03-01
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多