【发布时间】:2018-09-24 07:09:34
【问题描述】:
在我的工作中,我们正在逐渐用微服务架构取代单一的遗留系统。我的任务是使用 Asp.Net Core、Identity Server 4 和 Entity Framework* 编写身份验证服务器。遗留系统已经有auth,我们的deadline快到了,所以我们暂时将遗留系统作为后端使用。
如何设置身份服务器/实体框架以通过旧系统提取登录信息?到目前为止,我发现的所有内容都涉及添加像 SQL 服务器这样的数据库。假设为了论证,我无法直接从遗留系统使用的 MySQL 数据库中提取数据,但通过 JSON API 很容易获取用户数据。
我已经编写了一个 DbContext 和一个使用它的 IProfileService 的实现,但我不确定如何在 DbContext 中实际拉取用户,当我尝试从客户端登录时出现此错误:
没有为此 DbContext 配置数据库提供程序。可以通过覆盖 DbContext.OnConfiguring 方法或在应用程序服务提供者上使用 AddDbContext 来配置提供者。如果使用了 AddDbContext,那么还要确保您的 DbContext 类型在其构造函数中接受 DbContextOptions 对象并将其传递给 DbContext 的基本构造函数。
但是我无法找到/弄清楚要在 DbContext.OnConfiguring 中放置什么来设置它。我想我需要在某处实现 IServiceProvider,但找不到任何详细信息。
*我们不接受这些,因此欢迎提出更合适的建议。我们正在使用 .Net Core。
【问题讨论】:
-
您的问题是关于尝试在 .NET Core 应用程序中连接到 MySQL 数据库(使用数据库优先的 EntityFramework)吗?还是关于将 JSON API 中的数据插入新数据库?
-
@Wurd 两者都不是;我想像使用(只读)数据库一样使用 JSON API。我想要发生的是:(1)用户将登录详细信息发送到 IS4 API; (2) 从 JSON API 检索用户并在 IS4 中进行身份验证; (3) IS4 API 返回一个授权令牌。
-
好的,你的问题到底是什么?关于如何在 EF 中使用 JSON api? EF 旨在连接到数据库,因此它无法做到这一点。我建议您围绕 JSON API 编写一个包装器并将其公开为 IQueryable。即使它是通过 api 调用获取数据,这也会使它看起来像“数据库”。
-
@Wurd 我的确切问题是:如何为 EF 编写中间件以从 JSON API 中提取数据。所以 IQueryable 可能是正确的方向;我没见过。
-
看起来我仍然需要实现 DbContext、IServiceProvider 和大约十几个其他类。对吗?
标签: entity-framework asp.net-core .net-core identityserver4