我应该合并身份服务器数据库和应用程序数据库吗?

时间:2019-01-16 06:31:19

标签: asp.net oauth identityserver4 oidc

我最近从头开始实施一个新应用程序,因此我创建了一个具有自己数据库的新应用程序,并且我将Identity Server 4与ASP.NET Identity一起使用,后者具有一个单独的持久性数据库,我将其命名为Identity_Server。

该计划是在不久的将来我将开始开发另一个应用程序,该应用程序将成为中央身份服务提供商(Identity Server 4)中的客户端。

我现在面临的问题是,在我正在开发的应用程序中,我有诸如CreatedById和LastUpdatedById之类的审核列,它们将捕获用户ID。我将有一个日志表,其中将用户ID存储为外键。 存储用户ID并不是问题,因为一旦用户登录到应用程序,我就可以捕获它,但是这个问题是在UI中,我想提出更有意义的声明,例如用户名或全名。

如何在应用程序实体和身份服务器用户实体之间建立关系,而这两者都位于单独的数据库上下文和单独的物理数据库中。

我应该更改架构并将所有应用程序实体与身份服务器保持在同一数据库中吗?

1 个答案:

答案 0 :(得分:3)

问题在于用户的信息不属于上下文。

混合这两种上下文不会帮助您,并且查询这两种上下文也不是解决方案。 解决方案是确保信息成为上下文的一部分。

这实际上就是身份的运作方式。当您使用外部提供商(例如Google)登录时,将在AspNetUsers表中创建用户的本地副本。多余?不,因为那是另一个上下文,您无权访问。

如果要在报告上显示用户信息,则需要创建用户的本地副本,其中包括相关信息。

请注意,索赔中可能包含当前用户的信息。但是,由于您还需要其他用户的信息,因此需要将其存储在业务环境中。

您可以选择某种策略来在用户登录时调用声明中的信息,调用UserInfo端点(如果得到同意),或者添加功能以在业务上下文中维护用户信息。

最重要的是,您需要在业务上下文中创建一个User表,其中包含报告所需的信息。