ASP核心。多种身份的最佳做法

时间:2018-11-09 14:07:06

标签: asp.net asp.net-core asp.net-identity

env:Asp Core, Entity-framework

在我的系统中,我有两种类型

[Table("User")]
ApplicationUser : IdentityUser<Guid>

[Table("Customer")]
Customer : IdentityUser<Guid>

两个实体(CustomerUser)都有许多不同的字段,这使得仅使用数据库中的一个表是不正确的。而且两个实体都必须有登录的可能性。
我发现ASP Net只能设置一个身份。

问题:什么是使这些东西起作用的最佳方法或最佳实践?

1 个答案:

答案 0 :(得分:2)

我建议您不要尝试从应用程序的其他边界上下文中混合或统一应用程序用户的身份和应用程序用户的含义。

从安全角度来看,应用程序用户的身份记录是他的表示,它用于用户的身份验证。因此,它包含用户安全性数据,其访问角色和其他安全性声明。任何身份记录都可以根据其角色和声明拥有非常特定的访问权限,通常就足够了。

如果您需要从另一个角度来代表应用程序用户(作为您的雇员或客户,也许作为来宾记录等),那么最好为该表创建另一个表(雇员,客户,来宾等)它在另一个DbContext中(不在Identity上下文中)。这将为您提供不混淆其概念边界的可能性。谁知道,也许您会决定在某个时候为每个边界上下文创建单独的微服务,而Identity会将它们作为另一个微服务来提供服务。

如果您现在问自己如何组织对同一应用程序用户的解释的这种并行存储,那么有不同的方法。但例如:

  • 用户注册时,您会为其创建身份
  • 登录后,他将其身份数据用于身份验证
  • 但是,当他创建他的第一笔订单时,您会为他创建与他的ID相同的ID或具有Identity的外键的客户记录,或者...其他取决于您的需求和业务逻辑。