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中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...
随机推荐
- 老哥,您看我这篇Java集合,还有机会评优吗?
集合在我们日常开发使用的次数数不胜数,ArrayList/LinkedList/HashMap/HashSet······信手拈来,抬手就拿来用,在 IDE 上龙飞凤舞,但是作为一名合格的优雅的程序猿 ...
- Git科普文,Git基本原理&各种骚操作
Git简单介绍 Git是一个分布式版本控制软件,最初由Linus Torvalds创作,于2005年以GPL发布.最初目的是为更好地管理Linux内核开发而设计. Git工作流程以及各个区域 Work ...
- 18-关键字:this
1.可以调用的结构:属性.方法:构造器2.this调用属性.方法: this理解为:当前对象 或 当前正在创建的对象 2.1 在类的方法中,我们可以使用"this.属性"或&quo ...
- 如何将ppt演示文稿上传到微信公众号?
如何将ppt演示文稿上传到微信公众号? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下 ...
- python爬虫:XPath语法和使用示例
python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 选取节点 XPath使用路 ...
- 2020-06-21:ZK的哪些基础能力构建出了哪些上层应用?
福哥答案2020-06-21: 福哥口诀法:数负命Ma集配分(使用场景:数据发布订阅.负载均衡.命名服务.Master 选举.集群管理.配置管理.分布式队列和分布式锁) 数据发布订阅:dubbo的rp ...
- jQuery的基础效果题
Jquery第二次考核 之真金不怕火炼 1. 名词解释 实例对象:var p1=new Person(); p1就是实例对象 构造:function Person(){} 原型对象:在 JavaS ...
- Vue-Router 基础入门教程
Vue-Router 基础入门教程 前言 这周的计划是用VUE将之前的小demo的前端给重构了,并且做成前后端分离的样式,因为之前的那个聊天室的demo几乎都是在一个路由上完成的,所以学习Vue-ro ...
- Clion C++ 乱码,debug乱码
Clion新建项目,默认是使用UTF-8 Clion点击运行图标,使用的terminal不能正常显示UTF-8,因为其使用的是GBK编码 所以只要将源文件编码改为GBK就好了 1.界面右下角,有个UT ...
- windows 下 安装 RabbitMQ
RabbitMQ是一个在AMQP协议标准基础上完整的.可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器.它扮演 ...