代码之家  ›  专栏  ›  技术社区  ›  ovasylenko

ASP核心。多重身份的最佳实践

  •  0
  • ovasylenko  · 技术社区  · 6 年前

    环境: Asp Core, Entity-framework

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

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

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

    问题:什么是让这些东西工作的最佳方式或最佳实践?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Rustam Ashurov    6 年前

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

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

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

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

    • 当用户注册时,您为他创建身份
    • 登录后,他使用自己的身份数据进行身份验证
    • 但当他创建第一个订单时,您为他创建的客户记录与他的身份相同,或者具有身份的外键,或者。。。其余部分取决于您的需求和业务逻辑。