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

2024-04-07

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

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

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


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

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

正如我在回答中所解释的here https://stackoverflow.com/questions/48352259/ef-core-relationships-containing-external-identity/48366840#48366840,您不需要登录用户和您的业务上下文之间的关系。相反,在业务上下文中创建用户。登录用户的目的与业务用户不同。

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

In IdentityServer:如果用户可以注册一个网站,那么您可以扩展该网站报名表格带有可用网站的下拉菜单。或者如果用户可以注册多个网站,则提供一个列表。

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

Extend IdentityServer注册用户后调用API。为此,我将在IdentityServer包含要在每个网站上注册的 URL 的上下文。创建登录用户后,调用配置的API来注册业务用户。

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

您可以对客户端应用程序使用类似的策略。延长IdentityServer使用 API 方法允许客户端应用程序注册用户。

如果您想撤回访问权限,可以删除登录用户,而无需删除业务用户。如果你不想破坏历史信息,你就不会想要这样。您还可以使用声明来指定用户是否有权访问该网站,而无需删除登录用户。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Identity Server 4,EF Core,在 API 和 IS4 之间共享 DbContext 的相关文章

  • ASP.NET Core URL 重写

    我正在尝试将我的网站从 www 重定向到非 www 规则以及 http 到 https https example com https example com 在中间件中 我曾经在 web config 中进行这些重定向更改 例如
  • Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ForEachAsync() 出现意外行为

    以下是重现的步骤 以下程序使用 Net Core 控制台应用程序和 EF Core 将 10 000 行从一个 SQL 表复制到另一个 SQL 表 该程序分 100 批插入记录 并且 这很重要 它为每次插入创建一个新的 DbContext
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 在数据库中存储密码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 ActiveAndroid 库存储 HashMap

    我有一堂课 Table name Control public class Control extends Model Column private String name Column private Map
  • 通过 .NET Core 控制台应用程序中的依赖项注入访问配置

    如何正确激活使用 ServiceCollection Configure 函数添加的配置 public static void Main args args serviceCollection new ServiceCollection s
  • 使用数据库进行日志记录

    大多数日志似乎都是纯文本形式 而不是放入 MySQL 其他类型的数据库中 这是否有原因 在我看来 将它们放入数据库将使分析变得非常非常容易 但这会以牺牲速度还是其他什么为代价 我不太关心可移植性 显然你会有数据库连接的文本日志 我能想到两大
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 如何使用sql脚本更改列的属性

    如何使用 sql 脚本更改列的属性 这是我尝试过但出现错误的方法 ALTER TABLE dbo tblBiometricPattern COLUMN BiometricPatternID TINYINT NOT NULL IDENTITY
  • 具有多个主键的 SQLAlchemy 不会自动设置任何

    我有一个简单的表 class test Base tablename test id Column Integer primary key True title Column String def init self title self
  • SQL 按计数排序

    如果我有一个表和这样的数据 ID Name Group 1 Apple A 2 Boy A 3 Cat B 4 Dog C 5 Elep C 6 Fish C 我希望根据 Group 的总和从小到大进行排序 例如 A 2条记录 B 1条记录
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • ASP.NET Core Identity 更改登录 URL

    我正在使用 ASP NET Core 2 1 并且使用脚手架来添加身份 工作正常 除了当我尝试转到需要登录的页面时 它需要我 Identity Account Login ReturnUrl 如何将其更改为仅转到 Account Login
  • SQL Server 批量插入 - “批量加载数据转换错误”

    bulk insert dbo A FROM d AData csv WITH FIELDTERMINATOR ROWTERMINATOR n 将批量数据插入数据库时 在检查可疑数据后 我遇到了无法解释的错误 消息 4867 16 级 状态
  • 将命名空间添加到 ASP.NET MVC 6 中的所有视图

    我正在使用 MVC 6 并且希望能够从我的所有 Razor 视图全局访问特定的命名空间 在 MVC 5 中 这相当简单 我只需将以下代码添加到我的 views web config file
  • 如何在 Razor 编辑视图中显示选中的单选按钮 Asp net core mvc

    尽管 Razor 视图中的 Asp 网络核心代码 model List
  • 如何使用 SQL 通过表示多级订单的 varchar 字段正确排序?

    我不太喜欢数据库 我发现在查询上出现以下问题SQL服务器数据库旧的遗留应用程序的 我声明不幸的是我无法更改数据库结构 字段类型 这非常难看 我有以下情况 SELECT Sottocategoria IdSottocategoria IdCa
  • 当实体位于不同项目中时,为什么 Mediatr 不解析方法?

    我有一个简单的项目来尝试 Mediatr 问题 当我的处理程序的具体类位于我的 API 的同一项目中时 它就可以工作 但是 当我将该处理程序类放入不同的项目 并且 API 引用该项目 ofc 时 它不会解析注册表 我收到此错误 未找到该类型
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执

随机推荐