IdentityServer4之持久化很顺手的事

原计划打算在春节期间多分享几篇技术文章的,但到最后一篇也没出,偷懒了吗?算是吧,过程是这样的:每次拿出电脑,在孩姥姥家的院子总有阳光沐浴,看不清屏幕,回屋又有点冷(在强行找理由),于是又带着娃遛弯去啦。哪有那么多理由,就是想偷个懒;不过后面几天把计算机组成原理简单过了过,后面整理整理再单独给小伙伴分享吧。

这次接着IdentityServer4说,之前一直用内存数据进行测试演示,在正式项目中肯定是要存数据库的(除非数据固定,用内存方式实现);接下来就用Demo实操的过程说说IdentityServer4的持久化。

正文

IdentityServer4已经对EF Core有很好的支持与封装,用很少的代码就能实现数据持久化,重点还是需要对EF Core有所了解,如果还有不了解的小伙伴,请先花几分钟看看之前分享的关于EF Core的文章()。

主要需要nuget包如下:

IdentityServer4:这个包是IdentityServer4的核心包,项目中只要使用IdentityServer4,就必须引入此包;

IdentityServer4.EntityFramework:这个包是IdentityServer4针对EF进行封装的包,支持使用EF进行数据的持久化;

Microsoft.EntityFrameworkCore.SqlServer:针对不同的数据库引入不同的EF包,这里使用的是微软提供的本地数据库,所以引入的SqlServer;

Microsoft.EntityFrameworkCore.Tools:如果需要在程序的包管理控制台进行迁移操作,就需要在指定程序集中安装此包;

Microsoft.EntityFrameworkCore.Design:如果需要在命令行中进行迁移操作,就需要在指定程序集中安装此包;

注:Demo演示采用的是包管理控制台的方式进行迁移操作;命令行的方式思路是一样的,只是使用的命令稍微有点不同;

Demo走起来

项目准备

这里就不从头到尾敲代码啦,把上一节的代码拷贝过来,重点还是关注持久化的过程(这个理由棒棒哒)。

源码地址:https://github.com/zyq025/IDS4Demo/tree/main/AuthorizationCode。

开始撸码

先把包都引入到程序中,如下图:

IdentityServer4之持久化很顺手的事

然后在Startup.cs文件中,将原来的内存模式改为从数据库中读取即可;其实最关键的就是IdentityServer4封装好的两个上下文:

ConfigurationDbContext:这个上下文主要是针对配置数据,比如客户端(Client)、资源(Resources)等;

PersistedGrantDbContext:这个上下文主要是针对用户授权操作时的数据和临时数据,比如同意授权的数据、Token等;

在代码中只需要针对这这两个上下文指定数据库就行啦,如果没有什么自定义需求,不用其他配置,如下:

IdentityServer4之持久化很顺手的事

迁移就完事啦

代码撸完啦,剩下的就是EF迁移的几步走就完事啦(这里演示用的包管理控制台):

注: 如果程序中有多个上下文,如果不指定上下文,迁移会报错,因为程序不知要到迁移哪个。

IdentityServer4之持久化很顺手的事

新增迁移

指定ConfigurationDbContext

IdentityServer4之持久化很顺手的事

指定PersistedGrantDbContext

IdentityServer4之持久化很顺手的事

参数简要说明:

-Context : 指定上下文进行迁移;

-OutputDir:迁移生成的文件存放路径;

最后迁移的文件结果如下:

IdentityServer4之持久化很顺手的事

根据迁移文件,同步到数据库中

先同步ConfigurationDbContext

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzdyd.html