ABP VNext实践之搭建可用于生产的IdentityServer4
一、前言
用了半年多的abp vnext,在开发的效果还是非常的好,可以说节省了很多时间,像事件总线、模块化开发、动态API进行远程调用、自动API控制器等等,一整套的规范,让开发人员更方便的集成,提升效率;大家如果想多了解abp vnext 更多的资料或者源码,可以到github上看,文章结尾也会给出源码地址和wiki地址,优秀的你们要更优秀才行。
今天给大家讲讲如何在利用abp vnext框架搭建IDS4且可以在生产环境下使用的,其中也需要针对于IDS4在liunx系统使用nginx代理中端点不是https的特别注意事项配置,这个也是一个坑,如果不注意,授权就不成功,除非配置了跳过https的强制验证;
二、ABP VNext CLI生成一个项目解决方案
CLI 命令大家可以参考wiki,命令如下:abp new Louie.Ids4Demo --ui none --separate-identity-server,其中 --separate-identity-server代表将IdentityServer应用程序与API host应用程序分开,--ui none 无UI;打开命令窗口,拷贝进去后就可以生成一个解决方案;
然后我们授权需要修改一下项目中的代码迁移配置,因为我这边用的是mysql,而命令生成的是使用sqlserver,在 Louie.Ids4Demo.EntityFrameworkCore中把SQLServer改成Mysql nuget包,并且在DbMigrations类库中删除Migrations文件夹,然后修改DbContextFactory.cs里面的配置;截图如下:
1、Louie.Ids4Demo.EntityFrameworkCore 类库,去掉sqlserver包,添加mysql包

打开 Ids4DemoEntityFrameworkCoreModule 修改模块注入和命名空间

2、Louie.Ids4Demo.EntityFrameworkCore.DbMigrations 类库,删除Migrations文件
并且修改Ids4DemoMigrationsDbContextFactory.cs文件中的链接配置

3、在Louie.Ids4Demo.IdentityServer 主程序中 appsetting.json 添加数据库连接字符串
4、然后使用迁移命令,生成对应的数据库表

5、打开Louie.Ids4Demo.IdentityServer 主程序,打开Ids4DemoIdentityServerModule.cs 类
在里面配置自定义的RSA非对称加密证书,并且禁止在开发环境下由系统生成的临时证书,我们需要使用重写PreConfigureServices来替换框架默认的配置
public override void PreConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration(); var filePath = Path.Combine(AppContext.BaseDirectory, configuration["Certificates:CerPath"]);
if (!File.Exists(filePath))
{
throw new FileNotFoundException($"没有证书!");
}
//禁止生成开发的id4证书
PreConfigure<AbpIdentityServerBuilderOptions>(options =>
{
options.AddDeveloperSigningCredential = false; }); PreConfigure<IIdentityServerBuilder>(opt =>
{
opt.AddSigningCredential(new X509Certificate2(
filePath,
configuration["Certificates:Password"] //Export Password)
))
.AddResourceOwnerValidator<AuthROPValidator>()
.AddProfileService<AuthROPProfileService>();
});
}
当然证书是我自己生成的,大家可以自行生成,把生成好的证书放在主程序的目录下,然后再appsetting.json 中配置一下
"Certificates": { //IDS4的签名证书,防止串改
"CerPath": "xxxx/idsrv4.pfx", //路径地址
"Password": "xxxx" //访问x509证书的访问密码,在证书生成的时候有要求配置密码
},
上面配置中有涉及到AddResourceOwnerValidator主要是用到密码模式下的自定义验证逻辑以及添加声明,如果大家不需要则可以不用配置,直接注释;AddProfileService 主要是是声明claims需要和库表中定义的申明一致,否则无法显示,这个也是一个安全校验的方式。
配置完后启动打开浏览器,并且启动的url后缀添加 .well-known/openid-configuration,如果可以查看到端点则代表配置成功。

6、问题来了,在我们的IDS4部署到docker上后,发现查看的端点不是https的,我们需要在OnApplicationInitialization 方法中配置一个特殊代码
当然大家也可以看一下一个解决方案的issue:https://github.com/dotnet/AspNetCore.Docs/issues/2384
主要阿德原因是使用的反向代理导致域名是https的,但是端点无法映射https;插入以下代码即可
var forwardOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
RequireHeaderSymmetry = false
}; forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear(); // ref: https://github.com/aspnet/Docs/issues/2384
app.UseForwardedHeaders(forwardOptions);
大家在部署到生产线后就可以看到端点已经是https了
7、ids4配置已经介绍完成了,希望大家可以多为.net core开源社区贡献一份力量
如果在开发过程中遇到问题,欢迎留言。
asp.net core 交流群:787464275 欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!
微信公众号:欢迎关注 QQ技术交流群: 欢迎加群

ABP VNext实践之搭建可用于生产的IdentityServer4的更多相关文章
- 基于 abp vNext 微服务开发的敏捷应用构建平台 - 项目介绍
缘起 目前使用ABP框架已经将近3年了,大大小小的项目也陆陆续续做了很多.由于现有信息系统的架构模式是在底层的技术平台上直接构建信息系统并采用技术主导,使用业务无关的编程工具来开发信息系统的缺陷使得系 ...
- 学习abp vnext框架到精简到我的Vop框架
学习目标 框架特点 基于.NET 5平台开发 模块化系统 极少依赖 极易扩展 ....... 框架目的 学习.NET 5平台 学习abp vnext 上图大部分功能已经实现,多数是参考(copy)ab ...
- Abp Vnext Vue3 的版本实现
基于ABP Vnext的二次开发,前端 vue3.0,Typescript,Ant Design Vue ,Vben Admin 的后台管理框架. 技术点 Net Core5.0 ABP Vnext ...
- [Abp vNext微服务实践] - 前后端分类
一.前景 abp vNext是ABP 开源 Web应用程序框架,是abp的新一代开源web框架.框架完美的集成.net core.identity server4等开源框架,适用于构建web应用程序和 ...
- [Abp vNext微服务实践] - 文章目录
简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...
- [Abp vNext微服务实践] - vue-element-admin管理Identity
一.简介 abp vNext微服务框架中已经提供通用权限和用户角色管理模块,管理UI使用的是MVC模式,不适用于国内主打的MVVM开发模式.在前端框架选型后笔者决定改造abp vNext微服务框架中原 ...
- [Abp vNext微服务实践] - 框架分析
一.简介 abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究.我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.n ...
- [Abp vNext微服务实践] - 启动流程
前几篇分别介绍了abp vNext微服务框架和微服务CI/CD环境搭建,本篇开始介绍vNext微服务框架的开发环境搭建. 环境准备 官方介绍的系统架构图如下: 上图中身份服务和网关服务已经集成在系统中 ...
- [Abp vNext微服务实践] - 业务开发
前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...
随机推荐
- idea查看类继承关系图
找到对应的类 查看类关系图
- 阿里居然推出了开源的JDK,你造么?
简介 Alibaba Dragonwell 是一款免费的, 生产就绪型Open JDK 发行版,提供长期支持,包括性能增强和安全修复.阿里巴巴拥有最丰富的Java应用场景,覆盖电商,金融,物流等众多领 ...
- js数组中如何去除重复值?
在日常开发中,我们可能会遇到将一个数组中里面的重复值去除,那么,我就将我自己所学习到的几种方法分享出来 去除数组重复值方法: 1,利用indexOf()方法去除 思路:创建一个新数组,然后循环要去重的 ...
- 用var声明变量,在java中居然有这么多细节,你都了解么?
简介 Java SE 10引入了局部变量的类型推断.早先,所有的局部变量声明都要在左侧声明明确类型. 使用类型推断,一些显式类型可以替换为具有初始化值的局部变量保留类型var,这种作为局部变量类型 的 ...
- Java环境变量,jdk和jre的区别,面向对象语言编程
什么是java? java是一门面向对象的编程语言,包括java SE, java ME, Java EE . 广泛使用的是作为后端语言的Java EE开发, 面向对象和面向过程? java,C++ ...
- Bystack跨链技术源码解读
Bystack是由比原链团队提出的一主多侧链架构的BaaS平台.其将区块链应用分为三层架构:底层账本层,侧链扩展层,业务适配层.底层账本层为Layer1,即为目前比较成熟的采用POW共识的Bytom公 ...
- 01-java实现动态数组
01-手撸动态数组 本篇是恋上数据结构第一季个人总结 借鉴https://juejin.im/post/6844904001478066183#heading-0 本人git https://gith ...
- RIPS源码阅读记录(二)
Author: tr1ple 这部分主要分析scanner.php的逻辑,在token流重构完成后,此时ini_get是否包含auto_prepend_file或者auto_append_file 取 ...
- C#LeetCode刷题-回溯算法
回溯算法篇 # 题名 刷题 通过率 难度 10 正则表达式匹配 18.8% 困难 17 电话号码的字母组合 43.8% 中等 22 括号生成 64.9% 中等 37 解数独 45.8% ...
- JVM垃圾回收(GC)
JVM垃圾回收(GC) 1. 判断对象是否可以被回收 引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,但无法解决对象相互循环引用的问 ...