IdentityServer4 中文文档 -16- (快速入门)使用 EntityFramework Core 存储配置数据
我们将移动到数据库的数据有两种,第一种是配置数据(资源 resources 和客户端 client 定义数据)。第二种是 IdentityServer 运行时产生的操作数据。这些存储库都是基于接口建模的,并且我们在 NuGet 程序包中为这些接口提供了一套 EF 实现。
我们从添加 IdentityServer4.EntityFramework
NuGet 程序包的引用到 IdentityServer 项目中开始(请使用“1.0.1”以上版本的程序包):
添加 SqlServer
鉴于 EF 的灵活性,你现在可以使用任何 EF 支持的数据库。在该快速入门中我们将使用 Visual Studio 自带的 SqlServer LocalDb 版。
为了添加 SqlServer,我们需要多一些 NeGet 程序包。
添加 Microsoft.EntityFrameworkCore.SqlServer
程序包:
添加 Microsoft.EntityFrameworkCore.Tools
程序包:
然后添加以下片段到 元素标签之前:
其最终看起来是这样的:
保存并关闭该文件。为了验证你已经安装了工具属性,你可以在项目文件目录下打开命令提示符并运行 dotnet ef
命令。运行结果看起来大概是这样的:
下一个步骤是替换当前在 Startup.cs 的 方法中调用的 AddInMemoryClients
、AddInMemoryIdentityResources
和 AddInMemoryApiResources
。我们将用以下代码替换它们:
上述代码将连接字符串直接硬编码到了代码里面,你可以根据需要进行更改。还有,调用 AddConfigurationStore
和 其实是为了将 EF 的存储实现注册到系统中。
传递给这些 API 的 “builder” 回调函数是 EF 的机制,这种机制允许你为上述两个存储实现的 DbContext
配置对应的 DbContextOptionsBuilder
—— 这涉及到你将如何使用数据库提供程序来装配 DbContext 类型的实例。这里通过调用 UseSqlServer
来使用 SqlServer。你也可以看得出来,这里就是提供数据库连接字符串的地方。
我们接下来将添加数据迁移。
添加数据迁移
为了创建迁移,你需要打开命令提示符并定位到 IdentityServer 项目所在的目录,然后运行以下两个命令:
运行结果看起来应该是这样的:
现在我们有了数据迁移,我们可以编写代码来从数据迁移创建数据库了。我们还将使用之前的快速入门中定义的内存配置数据作为种子来初始化数据库。
在 Startup.cs 中添加以下方法来协助初始化数据库:
然后在 方法中调用它:
现在,如果你运行 IdentityServer 项目,应该会创建数据库并使用之前定义的配置数据初始化它。你应该能够使用 SqlServer Management Studio 或 Visual Studio 连接和检查数据:
运行客户端应用程序
现在你应该能够运行所有现有的客户端应用程序并登陆、获取令牌以及调用API了 —— 这些都是基于数据库配置的。