从零搭建一个IdentityServer——项目搭建
- 创建一个空的Asp.net Core 5.0项目
- 添加IdentityServer4
- IdentityServer4数据持久化
- 配置IdentityServer4证书
- 创建一个基于Jwt身份验证的WebApi项目
- 小结
创建一个空的Asp.net Core 5.0项目


添加IdentityServer4组件

安装完成后通过AddIdentityServer方法将相关的服务注册到容器中,同时这里返回一个builder用于继续构建IdentityServer服务,如存储、缓存、加密相关的密钥等等;

IdentityServer4数据持久化

这个问题的原因在于,IdentityServer4在进行授权时实际上是依赖一系列数据的,这些数据包括Client、Resource、Scope等,所以为了保证授权相关操作能够完成,需要配置相关数据的存储服务,IdentityServer4默认提供了测试基于内存的数据存储,但一般只是用于测试目的:

关于数据持久化,在.net技术栈中可以想到的就是Entity Framework,同时IdentityServer4提供了名为:IdentityServer4.EntityFramework的包,它包含了相关的实体类型(IdentityServer4.EntityFramework.Storage)以及EF的DbContext。所以引入IdentityServer4.EntityFramework包就可以实现基于EF的数据持久化,另外也可以自己实现。
上图中可以看到IdentityServer4关于EF的包有2个,但是实际上安装IdentityServer4.EntityFramework就包含Storage这个包了:
安装完成之后,我们可以在IdentityServer4.EntityFramework.Storage包中找到以下两个DbContext类型:



然后就可以对IdentityServer的存储进行配置了:
以上主要是对数据库链接字符串、数据库版本、字符集以及数据库迁移程序集进行配置,需要注意的是在对数据库进行迁移的时候默认使用DbContext所在的程序集,而IdentityServer4提供的DbContext位于IdentityServer4.EntityFramework.Storage包里面,所以为了能够确保迁移文件正常生成,所以需要将Startup所在的程序集设为迁移程序集(注:更适合的方式是专门创建一个数据库迁移项目来作为迁移程序集,这样数据库迁移的相关内容可以单独维护)。



注:-c和-o分别是-Context 和-OutputDir 的简写,在参数没有二义性时可以使用简写。

执行数据库更新命令后,数据库将完成创建:

数据库也就创建好了:
启动程序,并访问https://localhost:55006/.well-known/openid-configuration即可看到以下内容,证明IdentityServer4已经成功启动了:

注:关于IdentityServer4的默认数据可通过命令“dotnet new -i IdentityServer4.Templates”先安装IdentityServer4相关模板,然后使用“dotnet new is4ef”命令来创建,具体参考文档:https://identityserver4.readthedocs.io/en/latest/quickstarts/5_entityframework.html

配置IdentityServer4证书
运行程序,通过测试数据中的client及其密码尝试获取access token:

添加代码后再次运行程序,就能够生成Access Token 了:
创建一个基于Jwt身份验证的WebApi项目


设置API的授权访问:

成功访问,但是这里有个小细节需要注意一下,就是当获取到access token后,在token的有效期内,哪怕是把IdentityServer关闭,也能使用token正常访问受保护资源,换句话说access token颁发后就与IdentityServer无关了,以上内容实际上是使用Asp.Net core 5.0以及IdentityServer4实现了一个基于客户端证书(Client Credentials)的Oauth2.0授权流程,但IdentityServer提供的内容不仅于此,后续文章将会对该IdentityServer继续完善,使其成为一个功能完善的身份验证服务。
小结
从零搭建一个IdentityServer——项目搭建的更多相关文章
- 从零搭建一个IdentityServer——目录(更新中...)
从零搭建一个IdentityServer--项目搭建 从零搭建一个IdentityServer--集成Asp.net core Identity 从零搭建一个IdentityServer--初识Ope ...
- 从零搭建一个IdentityServer——会话管理与登出
在上一篇文章中我们介绍了单页应用是如何使用IdentityServer完成身份验证的,并且在讲到静默登录以及会话监听的时候都提到会话(Session)这一概念,会话指的是用户与系统之间交互过程,反过来 ...
- 从零搭建一个IdentityServer——资源与访问控制
IdentityServer作为授权服务器它的最终目的是用于对资源进行管控,这里所说的资源有两种,其一是API资源,实际上也就是OIDC协议中客户端(RP)所需要访问的一系列受保护的资源(API),授 ...
- 从零搭建一个SpringCloud项目之Feign搭建
从零搭建一个SpringCloud项目之Feign搭建 工程简述 目的:实现trade服务通过feign调用user服务的功能.因为trade服务会用到user里的一些类和接口,所以抽出了其他服务需要 ...
- 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权
OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...
- 如何搭建一个VUE项目
搭建环境 搭建node环境 下载 1.进入node.js官方网站下载页,点击下图中框出位置,进行下载即可,当前版本为8.9.4,下载网址为:https://nodejs.org/zh-cn/downl ...
- vue-用Vue-cli从零开始搭建一个Vue项目
Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组件可重复使用:数据驱动是前端的未来发展方向,释放了对 ...
- 基于 Express 搭建一个node项目 - 起步
一,如何基于 Express 搭建一个node项目 什么是Express 借用官方的介绍,Express是一个基于Node.js平台的极简.灵活的web应用开发框架,它提供了一系列强大的特性,帮助你创 ...
- 从零开始搭建一个react项目
Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...
随机推荐
- Spring Cloud Alibaba基础教程-Nacos(一)
2019快结束,也有很久没写博客了,今天我们来谈谈Nacos,如果对您有帮助,麻烦左上角点个关注 ,谢谢 ! 嘻嘻 今天先写第一篇 文章目录 为什么要使用Nacos Eureka 闭源 Nacos的优 ...
- MySQL_CRUD_In_Terminal
MySQL的CRUD操作 从Terminal中,可以对数据库进行链接,无需GUI界面就可以对数据库进行相关操作.对于Linux.Windows.MacOS,也可以使用可视化软件Navicat.MySQ ...
- 论文阅读: A Review of Robot Learning for Manipulation: Challenges, Representations, and Algorithms
机器人学习操纵综述:挑战,表示形式和算法 1.介绍 因此,研究人员专注于机器人应如何学习操纵周围世界的问题. 这项研究的范围很广,从学习个人操作技巧到人类演示,再到学习适用于高级计划的操作任务的抽象描 ...
- 【对线面试官】Java注解
public void send(String userName) { try { // qps 上报 qps(params); long startTime = System.c ...
- PPT技术干货1(下)——数据图表分析、逻辑梳理、高效办公
数据分析 让数据指导决策,帮你获得业绩增长 数据展示是PPT必备的基础技能, 有些人是简单粗暴的将数据直接堆在页面上: 这样的汇报缺乏重点,不具有针对性. 图表该如何设计呢? 1.数据可视化,内容交互 ...
- 使用Python实现搜索任意电影资源的磁力链接
对于喜欢电影的人来说各种电影资源必不可少,但每次自己搜索都比较麻烦,索性用python自己写一个自动搜索的脚本. 这里我只分享我的思路,具体如何实现参考代码,要想实现搜索功能先要抓包分析如何发送数据, ...
- 为什么线程安全的List推荐使用CopyOnWriteArrayList,而不是Vector
注:本系列文章中用到的jdk版本均为java8 相比很多同学在刚接触Java集合的时候,线程安全的List用的一定是Vector.但是现在用到的线程安全的List一般都会用CopyOnWriteArr ...
- pyspark使用-dataframe操作
一.读取csv文件 1.用pandas读取 import pandas as pd from pyspark.sql import SparkSession spark=SparkSession.bu ...
- 如何快速学会git
相信大多数入门者都对git的原理比较恍惚,今天我们来告诉大家如何快速学会git命令. 1.git init 这个命令会在当前目录里创建一个.git目录,也就是初始化本地仓库.git. 如图先创建文件夹 ...
- mysql性能调优注意事项
1.最左原则 注意遇到> < like between失效 2.对于like 查询 遇到最左%索引无效 3.SQL性能优化目标:至少要达到range(对索引进行范围查找)级别,要求是 ...