分割用户身份和个人资料有意义吗?

And*_*lin 3 asp.net-identity microservices asp.net-core identityserver4

在基于微服务方法(更具体地说是 Azure Service Fabric)从头编写解决方案时,我想到了分割用户身份(登录凭据、声明等)和用户配置文件(可能包含一些社交信息)的想法例如头像、社交网络链接、生日等)。

对于身份,我将使用 IdentityServer4(无状态 ASP.Net Core),为了存储所有这些数据,我正在考虑使用实体框架 + SQL。配置文件将通过连接到 Cosmos DB(通过 Mongo DB API)在不同的微服务(也是无状态)上进行管理和存储,从而使其成为 NoSQL 存储。

这种方法有什么我不知道的缺点吗?

Chr*_*att 5

你在这里混淆了很多事情。首先,您将实际的“用户”实体保存到数据库中。没有充分的理由从中分离出“个人资料”,因为它只是有关用户的数据。如果您使用身份来管理用户、角色等,那么它被设计为可从头开始扩展,这意味着将用户数据放在用户实体上。单独的配置文件实体仅用于无目的地需要加入。

在更高级别上,一旦用户通过身份验证(通过身份服务器),您就拥有了主体。该主体基本上只是一组与特定“身份”(即经过身份验证的用户)相关的声明。这些声明来自多个地方,可能是用户记录、角色的数据,甚至是第三方声明,例如使用外部登录帐户时的声明。索赔来自哪里大多是无关紧要的。

总而言之,没有理由使用单独的配置文件实体,尤其没有理由使用完全不同的服务来处理配置文件。该配置文件服务将不可避免地必须利用用户服务,因此两者之间存在硬依赖性:一个明显的迹象表明它不是真正的单独服务。事实上,这只会使应用程序的其余部分变得更加复杂,因为您必须根据您所追求的用户部分来使用用户服务和配置文件服务。