Identity Server 4(EF Core)在 API 和 IS4 之间共享 DbContext



我正在使用Identity Server 4,Asp Identity,EF Core和一个数据库。 我目前有3个项目

  • 身份服务器- 包含所有数据上下文和所有迁移与我的应用程序表
  • API- 没有上下文,没有迁移,但是我需要从这里以某种方式访问数据库
  • Clinet- JavaScript

问题:如何从 IdentityServer 项目访问数据上下文,并且仍然将所有设置(数据库连接等)放在一个位置。我知道我可以从API引用IdentityServer并使用数据上下文,但这对我来说似乎不对。这样做的首选方法是什么?

由于您对此选项感兴趣,我决定将我的评论移至此答案。

首先,IdentityServer不是应用表的位置。这些是单独的上下文和单独的迁移。首选方法是保持关注点分离。

正如我在回答中解释的那样,您不需要登录用户和您的业务上下文之间的关系。而是在业务上下文中创建用户。登录用户的用途与业务用户不同。

我没有适合您的代码,但您可以从IdentityServer中获取示例应用程序之一。调整 API 以使用您的业务上下文。在该上下文中,添加用户表(链接到sub声明)和业务上下文所需的字段。顺便说一句,表是否在同一个数据库中并不重要,只是不要混合上下文。

IdentityServer:如果用户可以注册一个网站,那么您可以使用可用网站的下拉列表扩展注册表。或者,如果用户可以注册多个网站,则为列表。

现在这取决于所选择的策略。您可以等待在 API 中注册用户,但我认为立即注册用户要容易得多。还有其他选项,但这里有一个选项,它是 IdentityServer 配置的一部分(不向 IdentityServer 添加业务逻辑):

扩展IdentityServer以在注册用户后调用 API。为此,我会在IdentityServer上下文中添加一个表格,其中包含每个网站要注册的 URL。创建登录用户后,调用配置的 API 来注册业务用户。

在 API 中,需要添加IdentityServer可以调用以创建用户的方法,链接到sub声明并包含所需的用户信息。这样,您就可以使用sub声明来识别登录用户并将其链接到业务用户。

可以对客户端应用使用类似的策略。 使用 API 方法扩展IdentityServer,以允许客户端应用注册用户。

如果要撤销访问权限,可以删除登录用户,而不必删除业务用户。如果您不想破坏历史信息,则不想要。还可以使用声明指定用户是否有权访问网站,而无需删除登录用户。

相关内容

  • 没有找到相关文章

最新更新