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

Ram*_*sar 1 asp.net oauth openid-connect identityserver4

我最近从头开始实现一个新应用程序,所以我创建了一个新应用程序,它有自己的数据库,我使用 Identity Server 4 和 ASP.NET Identity,它有一个单独的持久性数据库,我将它命名为 Identity_Server。

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

我现在面临的问题是,在我正在开发的应用程序中,我有像 CreatedById 和 LastUpdatedById 这样的审计列,它们将捕获用户 ID。我将有一个日志表,我将在其中存储用户 ID 作为外键。存储用户 ID 不是问题,因为我可以在用户登录应用程序后捕获它,但问题是在 UI 中我想呈现更有意义的声明,如用户名或全名。

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

我是否应该更改架构并将我的所有应用程序实体保存在与身份服务器相同的数据库中?

Rua*_*urg 5

问题是用户的信息不是上下文的一部分。

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

这实际上是 Identity 的工作原理。当您使用外部提供商(如 Google)登录时,会在 AspNetUsers 表中创建用户的本地副本。多余的?不,因为这是另一个上下文,您无权访问。

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

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

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

底线是您需要在包含报告所需信息的业务上下文中创建一个用户表。