IdentityServer4之持久化很顺手的事

前言

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

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

正文

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

主要需要nuget包如下:

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

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

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

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

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

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

Demo走起来

  1. 项目准备

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

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

  2. 开始撸码

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


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

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

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

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

  3. 迁移就完事啦

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

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

  • 新增迁移

    指定ConfigurationDbContext


    指定PersistedGrantDbContext


    参数简要说明:

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

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

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

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

    先同步ConfigurationDbContext

    这时候对应的数据库就生成了,而且对应配置相关的表已经在数据库创建:

    再同步PersistedGrantDbContext

    这个表少,就两张:


    其实这样就已经可以啦,只要在数据库对应的表中添加对应的数据,就能进行操作啦; 那新手小伙伴肯定得苦恼啦,这么多表,咋知道哪个表存啥数据啊;不急,咱们把原来内存中的数据存进去,然后再看看每个表存了啥,这不就更加明了啦,比一个一个表说的还直接,这种方式还能促使小伙伴动手,不然都不知道里面存了啥(哈哈哈,高招)。那就多出来第四步,如下……

4. 加个种子数据美美哒

这里说的种子数据就是指原来在内存中数据,把它们读出来存到数据库中就行;很简单,通过上文直接存即可,代码如下:


方法写好啦,直接在Configure中调用即可,如下:


这样就完工啦,把授权服务器、资源服务器、客户端都启动,走一遍流程,看看是不是成功啦,不出意外一切顺利,这时再返过来看看每个表中都存啥数据,就真的很清晰啦。这里就不一一截图说,相信小伙伴都能搞得明白。

到这肯定有小伙伴要说话啦,用户那还是用的内存;之所以没放到上面一起说,那是因为用户这块的控制权完全在我们自己手里,可以自己设计(就是用户、菜单、角色那一套),也可以集成微软封装好的Identity(把常用的用户那一套已经封装啦)。

这里演示肯定挑着爽的玩,就集成微软封装好的Identity,来,继续撸码:

  1. 引入相关nuget包:


    引入的包简单说明

    IdentityServer4.AspNetIdentity:IdentityServer4对微软封装的Indentity的支持;

    Microsoft.AspNetCore.Identity.EntityFrameworkCore:对Identity提供EF支持;

  2. 撸码就对了

    因为IdentityDbContext是抽象类,不能直接使用,这里需要针对IdentityDbContext定义一个子类ApplicationDbContext,如下:


    然后在Startup.cs中注册相关服务即可:

  3. 迁移及同步:这里没有指定输出路径,小伙伴根据自己的需要进行指定。


    数据库中生成相关的表,如下:

  4. 更改登录和登出逻辑;


    登出的时调用 _signInManager.SignOutAsync();即可

  5. 加点种子数据,即程序启动时加入用户数据;


    方法写好,同样在Configure中调用即可,种子数据准备好之后,就可以用Zoe用户进行登录啦,密码就是Zoe123456&

这里就不专门针对微软封装的Identity说的那么细啦,小伙伴可以参考文档:https://docs.microsoft.com/zh-cn/aspnet/identity/overview/getting-started/introduction-to-aspnet-identity。

总结

IdentityServer4的入门暂时先到这篇吧,后续会在实战项目中进行使用分享。下一节先来说说服务发现。

一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手写体识别代码_Python识别图片中的文字

一、前言不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制。或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存。但是当我们想用到里面的文字时&a…

递推与储存,是动态规划的关键

小智最近由于项目需要,经常要接触到一些规划类的问题。那今天就给大家讲一讲旅行商问题及其解法吧。旅行商问题,即TSP问题(Travelling Salesman Problem)。问题是,有一个旅行商人要拜访n个城市,每个城市只能…

dotnet core TargetFramework 解析顺序探索

dotnet core TargetFramework 解析顺序测试Intro现在 dotnet 的 TargetFramework 越来越多,抛开 .NET Framework 不谈,如果一个类库支持多个 TargetFramework 应用实际运行的时候会使用哪个版本的 API 呢,之前一直都是想当然的自以为是了&…

大数据时代,掌握数据分析需要做到这几点

这些年来,随着进入大数据时代,各行各业均有一个词频频被提到,那就是数据分析。那么数据分析究竟是什么呢?数据分析就是指用适当的统计分析方法对收集来的大量数据进行处理分析,提取有用信息并形成结论,从而…

93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?

背景在实际项目中redis常被应用于做缓存,分布式锁/消息队列等。但是在搭建配置好redis服务器后很多朋友应该会发现和有这样的疑问,为什么redis默认建立了16个数据库,16个数据库的由来redis是一个字典结构的存储服务器,一个redis实…

“一边熬夜一边求不要猝死”,90后养生朋克指南,条条扎心!

随着一批又一批的90后步入中年秃头、失眠、衰老...健康的压力如影如随是时候开始养生朋克了当代青年:养生朋克指南养生朋克一边作死一边自救的养生方式比如一边熬夜一边涂贵价护肤品用最贵的眼霜 熬最长的夜心理活动经常是:一边熬夜一边祈祷自己不要猝死…

万级 K8S 集群背后,etcd 如何保持稳定性?

这几年,随着 Kubernetes 成为容器编排领域霸主,etcd 越来越火,GitHub star 已超过 34.2K。这与它的应用场景广泛密不可分,从服务发现到分布式锁,从配置存储到分布式协调,可以说,etcd 已成为云原…

qdialog 只有点击才能获得焦点_4 个突破点,让你的 Banner 点击率提升10倍

双 11 刚过,双 12又来了每年这个时候作为一名设计师,真的很难...老板压着做电商 banner还有很多人指指戳戳让你改稿好不容易按照别人的想法过稿结果banner 的点击率还不高其实,只需要稍微调整视觉重点你的电商banner 就会变得变得更吸引人&am…

穿背心的老院士,86岁,重病,还在敲代码,单手!

昨天有幸看到了一个视频,视频中,一位老先生穿着朴素的白背心,伏在桌上,对着电脑,一手按着写满密密麻麻数学公式的本子,另一只手仅用单指吃力又缓慢地按着键盘。老先生全神贯注地研究他是 “背心院士” 高伯…

百度广告点击软件_结束了,百度 “毒瘤” 广告!

“ 通过本文,你可以获取一款上网必备的插件,让你摆脱各种"毒瘤"广告。”大家天天逛网页,最恼人的也就是广告了吧。尤其是百度搜索时。01—毒瘤广告有多愁?百度广告有多可怕,小哥哥给你演示一下。百度搜“智齿…

java跳转画面后画面白了_如何跳转指定页面后再次跳转到另一页面或原来的页面...

c#图解教程第5版数万读者认可的新99.33元(需用券)去购买 >这里可以采用redirect以get形式向指定页面发出get请求,指定页面完成后会再次跳转到redirect后边指定的页面(注意:这里的redirect只是一个自定义参数,并不是自带的,名称…

【基础数学知识】带你理解泰勒展开式本质

推荐阅读时间:5min~8min主要内容:更好的理解,并且记忆泰勒展开式我们学习泰勒展开,本质上就是为了在某个点附近,用多项式函数取近似其他函数。可能有些童鞋就要问了,既然有一个函数了,为什么还需…

C#使用NPOI进行word的读写

目录一、简介1、操作Word的类库:二、简单使用1、XWPFDocument类的实例化2、设置页面的大小3、段落处理4、表格处理5、页眉页脚处理三、综合示例四、参考一、简介1、操作Word的类库:二、简单使用1、XWPFDocument类的实例化该类的实例对应一个word文档XWPF…

weblogic修改控制台ip_「Weblogic学习」Weblogic知识要点之JNDI/JTA编程开发

给它一个名字,它就能提供你要的服务,JNDI就是这么地任性。想任性的霸占数据?JTA为你把风。这期,谈谈JNDI和JTA的简单介绍,一起看看吧……JNDI编程JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的…

java不适合开发cv吗_JavaCV开发环境的配置

一.安装opencv2.4.4、测试运行OpenCV-2.4.4.exe,就是解压,把它解压到一个你喜欢的地方 ——1.1 路径最好不要太深,点啊点的最讨厌了2. 添加 ***\OpenCV2.4.4\build\x64\vc11\bin; 到环境变量的PATH后面 ——2.1 ***是你放OpenCV2.4.4的地方…

NA-NP-IE系列实验5:配置文件的备份和IOS 的备份

实验5:配置文件的备份和IOS 的备份<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1. 实验目的通过本实验&#xff0c;读者可以掌握如下技能&#xff1a;&#xff08;1&#xff09; 熟悉TFTP 服务器的使用&#xff08;2&#xf…

浅析 Sunday 算法

背景Sunday 算法是 Daniel M.Sunday 于 1990 年提出的字符串模式匹配。其效率在匹配随机的字符串时比其他匹配算法还要更快。Sunday 算法的实现可比 KMP&#xff0c;BM 的实现容易太多。算法过程假定主串为 "HERE IS A SIMPLE EXAMPLE"&#xff0c;模式串为 "EX…

.NET 6 Preview 1发布!

喜欢就关注我们吧&#xff01;.NET 6 首个预览版已发布&#xff0c;官方表示 .NET 6 的核心目标是完成从 .NET 5 开始的 .NET 统一计划的最后部分。此版本还将对 .NET 整体进行重大改进&#xff0c;包括针对云、桌面和移动应用程序的改进。.NET 6 计划于2021年11月正式发布&…

vba cad 获取宏的路径_VBA批量创建文件目录及链接,建议收藏备用

小伙伴们&#xff0c;之前有跟大家分享过Power Query获取文件夹内文件清单及其属性的方法【Excel快速获取文件列表及文件属性】。今天教大家通过VBA代码来实现同样的功能&#xff0c;提取文件夹内的文件信息更加灵活&#xff0c;只要选择对应的文件夹即可。实现效果操作方法&am…

机器信息MachineInfo

不管是业务功能需要还是开发诊断需要&#xff0c;经常需要用到CPU内存硬盘等信息&#xff0c;或者需要主板编号和系统编号做唯一设备标识。于是设计了机器信息类 MachineInfo &#xff0c;支持Windows、Linux、Raspberry等。Nuget包&#xff1a;NewLife.Core源码地址&#xff1…