【问题标题】:How to manage multiple user types in IdentityServer4 using AspNet Identity?如何使用 AspNet Identity 在 IdentityServer4 中管理多种用户类型?
【发布时间】:2019-11-02 15:00:42
【问题描述】:

为每个客户存储用户信息的最佳方式是什么?我有几个应用程序都使用相同的 IdentityServer 实例进行身份验证。 ASP.NET Identity 展示了如何通过从 IdentityUser 继承来扩展用户。

public class CustomUser : IdentityUser
{
   public Int32 CompanyId { get; set; }
}

但是,我的应用程序具有互斥的用户信息(例如,其他应用程序不需要 CompanyId 并且具有 CustomUser 的应用程序不需要的属性。)。

一种方法是创建一个包含两者所有属性的单一类型。当两个应用程序都需要不同公司的 CompanyId 的属性重叠时,可能会出现问题,更不用说每次查找完成时都会查询每一列,所以这似乎不正确。另一种选择是我可以在客户端应用程序中创建一个 UserData 表并根据需要从那里查询,这可能是我必须做的,因为我认为没有更好的选择。

如果有人知道更好的方法,请告诉我。

如果 UserManager 允许注册多个自定义用户类型,并且您可以根据您的选择获得不同的数据子集,同时每个查询仅针对其需要的数据进行优化,那将是完美的。然后,您可以为每种类型放置一个 SQL 索引,甚至可以在实体框架中放置用户 TPH 来组织信息。

【问题讨论】:

标签: authentication asp.net-identity identityserver4


【解决方案1】:

除非深入研究过于特定于应用的内容,否则它看起来就像一个普通的用户个人资料。
它包含许多描述用户的声明。让我们只考虑特定于用户,而不是特定于应用程序。例如,有年龄、国家、邮政地址、性别等等。有些应用只需要年龄和国家/地区来限制某些内容,而其他应用则需要邮政地址或电子邮件。
授权请求可以包含一组声明和范围来满足这些要求。
以上只是关于用户信息,而不是访问规则,以上所有内容都已在协议中。

关于更多特定于应用程序...为什么不将这些内容存储在更靠近应用程序并通过用户 ID 链接...

【讨论】:

  • 这对大多数东西来说都很好。拥有与用户信息相关的个人资料表没有问题。此外,我不介意存储与身份直接相关的详尽信息,例如集中存储的地址详细信息,因为没有重复。然而,对于角色,也许声称 AspNet Identity 管理这些,所以我想可能是一个自定义实现来满足需求,例如集中管理每个应用程序的角色。一个例子是一个用户可能是一个应用程序的管理员,但不是另一个。
  • admin 是公司的角色,因此与身份验证无关。我只是解释了直接来自协议规范的内容。 MS 通常在其基本模板中将所有内容合二为一。有时它很丑,有时还可以。恕我直言,MS 身份方案 + 与租户的某些关系可以很好地工作。但是您最初提到您需要为不同的 clients 而不是 tenants 设置不同的范围/声明集 - 这就是为什么我记得您每次都可以请求唯一您需要的,所以最后。 ..你可以结合这两种方法
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
相关资源
最近更新 更多