将ASP.NET标识添加到已具有托管用户表的现有项目中



我有一个现有的带有users表的web api项目。通常,User参与系统中的一些关键业务查询(因为其他表保留其"UserId"外键(。这些天我对添加Asp.net(核心(身份感兴趣。基本上,我已经执行了添加单独的Identity表、管理额外的数据库上下文(实现IdentityDbContext(以及添加JWT令牌服务所需的步骤。看起来一切都很好。然而,我现在想知道我应该如何";链接";在经过认证的用户(已通过身份模块登录(和在另一个原始"用户"上找到的用户之间;商业相关数据库";。我想的是,在登录时,根据用作用户名的电子邮件从原始Users表和新Identity表中检索userId,然后将其作为已验证用户的声明保存。通过这种方式,每次用户调用API(针对API相关控制器上的Authorize标记操作(时,假设通过了身份验证,我将手头有相关的userId,并能够从现有的业务表中寻址和查询所需的内容。

我想这是可行的,但我不确定这种方法,我想知道是否还有其他选择?

关于我上面提到的选项,我看到的主要缺点是,在创建新用户时,这应该针对2个不同的DB上的2个不同表执行。在这种情况下,为了将其保留在一个工作单元中,是否可以创建由两个不同的数据库上下文组成的事务范围?

你走在了正确的轨道上

我遇到了类似的问题

想象一下两种不同的微服务。

  • 身份微服务(存储身份信息(用户名、密码等((

  • 员工微服务(存储员工信息(姓名、姓氏等((

那么如何在这两个服务之间建立关系呢?

使用队列(RabbitMq、Kafka等(

  • 在用户注册后创建事件(UserCreatedEvent{Id,Name等。}(

  • workers微服务侦听此活动并将其记录在相应的表中

这是的最终状态

身份Id=1,UserName=ExampleUserName,电子邮件=Example@Email等等

员工Id=1,Name=ExampleName,Surname=ExampleSurname等…

现在,这两个服务都相互关联。

示例

如果我想获得现在登录的员工的信息。

var currentEmployeeId = User.Identity.GetById()

var employee = _db.Employee.GetById(currentEmployeeId)

最新更新