2022-07-26官方发布ABP 6.0.0-rc.1版本,本文挑选了几个新特性进行了介绍,主要包括LeptonX Lite默认主题、OpenIddict模块,以及如何将Identity Server迁移到OpenIddict。据ABP官方公众号介绍,ABP 6.0.0稳定版的计划发布日期为2022-09-06,具体以实际发布日期为准。

一.LeptonX Lite默认主题

  LeptonX Lite算是LeptonX Theme的一个简单实现,使用的是Razor Pages技术,而LeptonX Theme在ABP的商业版中有着完整的实现[17]。以前在ABP的MVC启动模板中,使用的是基本主题[18],而ABP 6.0.0-rc.1把LeptonX Lite作为默认主题[19]。

1.基本主题

基本主题的样子如下:



  基本主题在使用的时候都安装了哪些包呢?主要是在Web项目中需要安装Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic包,同时在模块类中需要依赖AbpAspNetCoreMvcUiBasicThemeModule模块,安装npm install @abp/aspnetcore.mvc.ui.theme.basic,运行abp install-libs。在wwwroot/styles中自定义global-styles.css文件,并且把该文件配置在模块的ConfigureServices()方法中:

Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(BasicThemeBundles.Styles.Global, bundle =>
{
bundle.AddFiles("/styles/global-styles.css");
});
});

2.LeptonX Lite主题

  LeptonX Lite的样子如下:



LeptonX Lite主题在使用的时候和基本主题差不多,差异如下:

(1)更新或安装CLI

dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.1
dotnet tool install Volo.Abp.Cli -g --version 6.0.0-rc.1

(2)安装包

dotnet add package Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite --prerelease

说明:务必加上这个--prerelease选项。

(3)依赖模块

[DependsOn(
// Remove BasicTheme module from DependsOn attribute
- typeof(AbpAspNetCoreMvcUiBasicThemeModule), // Add LeptonX Lite module to DependsOn attribute
+ typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
)]

(4)配置服务

Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(
// Remove following line
- BasicThemeBundles.Styles.Global,
// Add following line instead
+ LeptonXLiteThemeBundles.Styles.Global
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
});

  ABP商业版的LeptonX Theme样子如下:



说明:因为平时在开发中使用的前后端分离方式,所以对这块不做过多介绍,了解即可。如果感兴趣,可以深入的学习下Razor Pages、Blazor、Bootstrap、jQuery等技术。

二.OpenIddict模块

  这次ABP 6.0.0-rc.1较大的一个变化就是开始使用OpenIddict代替IDS(IdentityServer),因为IDS要收费了。ABP封装的OpenIddict模块源码结构如下:

1.将Demo项目运行起来

  在模块的app目录下有6个项目,重点关心的是OpenIddict.Demo.Server和OpenIddict.Demo.API,前者是集成模块的ABP应用,包含2个clients和1个scope。后者是使用authentication认证的ASP.NET Core API应用。配置好OpenIddict.Demo.Server的appsettings.json文件,然后启动OpenIddict.Demo.Server和OpenIddict.Demo.API项目。https://localhost:44303/api/claims接口如下:



  OpenIddict.Demo.Server项目启动后,生成的数据库OpenIddict-Demo-Server如下:

2.Volo.Abp.OpenIddict模块



4个Repository分别为:

IOpenIddictApplicationRepository
IOpenIddictScopeRepository
IOpenIddictAuthorizationRepository
IOpenIddictTokenRepository

4个Store分别为:

IOpenIddictApplicationStore
IOpenIddictScopeStore
IOpenIddictAuthorizationStore
IOpenIddictTokenStore

  Repository和Store的关系是什么呢?就是在Store中可以使用Repository来操作上述4种实体。从数据表上看,觉得OpenIddict相对于IDS4还是简单的,继续深入研究OpenIddict可以参考相关资源[6]-[15][21]。

  另外讲下怎么将OpenIddict模块运行起来,因为ABP中的模块在依赖其它项目的时候,都使用的源码依赖,将项目依赖(ProjectReference)修改为包依赖(PackageReference)即可。修改后的OpenIddict模块源码下载链接[23]。

三.MAUI启动模板

  ABP 6.0.0-rc.1版本的CLI还不支持通过MAUI模板来创建项目,应该要到ABP 6.0.0版本了:

四.将Identity Server迁移到OpenIddict[10]

1.OpenIddict默认授权服务

  从ABP 6.0.0版本起,在ABP的启动模板中默认使用OpenIddict作为授权服务,ABP应该会一直支持IDS的,ABP7.0将基于.NET7,如果IDS支持.NET7,那么ABP也会继续跟进的。但是ABP不会支持商业版本的Duende IDS[22]。

2.IDS迁移OpenIddict步骤

(1)将所有Volo的软件包更新为6.x。

(2)使用相应的OpenIddict.*包替换Volo的IdentityServer.*包。比如,Volo.Abp.IdentityServer.Domain到Volo.Abp.OpenIddict.Domain,Volo.Abp.Account.Web.IdentityServer到Volo.Abp.Account.Web.OpenIddict。

(3)使用相应的OpenIddict模块替换所有IdentityServer模块。比如,AbpIdentityServerDomainModule到AbpOpenIddictDomainModule,AbpAccountWebIdentityServerModule到AbpAccountWebOpenIddictModule。

(4)在ProjectNameDbContext类中,重命名ConfigureIdentityServer为ConfigureOpenIddict。

(5)在UseAuthentication后,删除UseIdentityServer,添加UseAbpOpenIddictValidation。

(6)在启动模块中添加如下代码:

public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
{
options.AddAudiences("ProjectName"); //修改为实际项目的名字
options.UseLocalServer();
options.UseAspNetCore();
});
});
}

(7)如果项目不是单独的AuthServer,那么添加ForwardIdentityAuthenticationForBearer:

private void ConfigureAuthentication(ServiceConfigurationContext context)
{
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
}

(8)将IdentityServerDataSeedContributor从Domain项目中删除。

(9)创建新版本的项目,并且与现有项目同名。

(10)拷贝新项目的ProjectName.Domain\OpenIddict\OpenIddictDataSeedContributor.cs到项目中,并且基于ProjectName.DbMigrator\appsettings.json来更新appsettings.json,注意修改端口号。

(11)如果在IndexModel中使用IClientRepository,那么拷贝新项目的Index.cshtml.cs和Index.cs到项目中。

(12)在AddAbpOpenIdConnect()方法中,更新scope的名字从role到roles。

(13)在HttpApi.Host项目中,删除options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);。

(14)AuthServer不再要求JWT bearer authentication,需要删除它,比如AddJwtBearer和UseJwtTokenMiddleware。

(15)在IDE中尝试编译项目,根据报错来删除和引用代码和命名空间。

(16)如果使用EF Core作为DatabaseProvider,那么迁移和更新数据库。

3.OpenIddict相关的模块包

(1)开源版本

Volo.Abp.OpenIddict.Domain (AbpOpenIddictDomainModule)
Volo.Abp.OpenIddict.Domain.Shared (AbpOpenIddictDomainSharedModule)
Volo.Abp.OpenIddict.EntityFrameworkCore (AbpOpenIddictEntityFrameworkCoreModule)
Volo.Abp.OpenIddict.AspNetCore (AbpOpenIddictAspNetCoreModule)
Volo.Abp.OpenIddict.MongoDB (AbpOpenIddictMongoDbModule)
Volo.Abp.Account.Web.OpenIddict (AbpAccountWebOpenIddictModule)
Volo.Abp.PermissionManagement.Domain.OpenIddict (AbpPermissionManagementDomainOpenIddictModule)

(2)商业版本

Volo.Abp.OpenIddict.Pro.Application.Contracts (AbpOpenIddictProApplicationContractsModule)
Volo.Abp.OpenIddict.Pro.Application (AbpOpenIddictProApplicationModule)
Volo.Abp.OpenIddict.Pro.HttpApi.Client (AbpOpenIddictProHttpApiClientModule)
Volo.Abp.OpenIddict.Pro.HttpApi (AbpOpenIddictProHttpApiModule)
Volo.Abp.OpenIddict.Pro.Blazor(AbpOpenIddictProBlazorModule)
Volo.Abp.OpenIddict.Pro.Blazor.Server (AbpOpenIddictProBlazorServerModule)
Volo.Abp.OpenIddict.Pro.Blazor.WebAssembly (AbpOpenIddictProBlazorWebAssemblyModule)
Volo.Abp.OpenIddict.Pro.Web (AbpOpenIddictProWebModule)

五.ABP的路线图

  貌似进展比较慢,特别是Vue启动模板,千呼万唤都出不来。不过似乎也不重要了,GitHub上面有很多的基于Vue的前端框架,比如vue-element-admin就不错:

参考文献:

[1]ABP v5.3.3和6.0.0-rc.1比较改变:https://github.com/abpframework/abp/compare/5.3.3...6.0.0-rc.1

[2]ABP路线图:https://docs.abp.io/zh-Hans/abp/latest/Road-Map

[3]ABP 6.0.0-rc.1最近发布日志:https://github.com/abpframework/abp/releases

[4]ABP.IO Platform 6.0 RC Has Been Published:https://blog.abp.io/abp/ABP.IO-Platform-6.0-RC-Has-Been-Published

[5]ABP框架功能:https://abp.io/features

[6]Add OpenIddict module:https://github.com/abpframework/abp/pull/12084

[7]ABP OpenIddict Modules:https://github.com/abpframework/abp/blob/dev/docs/en/Modules/OpenIddict.md

[8]Announcement of plan to replace the IdentityServer:https://github.com/abpframework/abp/issues/11989

[9]ABP OpenIddict Modules:https://docs.abp.io/zh-Hans/abp/6.0/Modules/OpenIddict

[10]Migration Identity Server to OpenIddict Guide:https://docs.abp.io/en/abp/6.0/Migration-Guides/IdentityServer_To_OpenIddict

[11]OpenIddict:https://github.com/openiddict

[12]OpenIddict官方文档:https://documentation.openiddict.com/

[13]openiddict/openiddict-core:https://github.com/openiddict/openiddict-core

[14]openiddict/openiddict-samples:https://github.com/openiddict/openiddict-samples

[15]openiddict/openiddict-documentation:https://github.com/openiddict/openiddict-documentation


[16]Integrated MAUI application startup template:https://github.com/abpframework/abp/pull/12962

[17]LeptonX Theme:https://x.leptontheme.com/

[18]ASP.NET Core MVC/Razor Pages: The Basic Theme:https://docs.abp.io/en/abp/latest/UI/AspNetCore/Basic-Theme

[19]LeptonX Lite MVC UI:https://docs.abp.io/en/abp/latest/Themes/LeptonXLite/AspNetCore

[20]ASP.NET Core MVC/Razor Pages: UI Theming:https://docs.abp.io/en/abp/latest/UI/AspNetCore/Theming

[21]abp-samples/Ids2OpenId:https://github.com/abpframework/abp-samples/tree/master/Ids2OpenId

[22]Fair Trade Software License:https://blog.duendesoftware.com/posts/20220111_fair_trade

[23]修改后的OpenIddict模块源码:https://url39.ctfile.com/f/2501739-633476836-599209?p=2096 (访问密码: 2096)

ABP 6.0.0-rc.1的新特性的更多相关文章

  1. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  2. ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

    放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...

  3. Atitit opencv3.0  3.1 3.2 新特性attilax总结

    Atitit opencv3.0  3.1 3.2 新特性attilax总结 1. 3.0OpenCV 3 的改动在哪?1 1.1. 模块构成该看哪些模块?2 2. 3.1新特性 2015-12-21 ...

  4. Python 3.8.0 正式版发布,新特性初体验 全面介绍

    Python 3.8.0 正式版发布,新特性初体验 北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PE ...

  5. 【译】.NET 5. 0 中 Windows Form 的新特性

    自从 Windows Form 在 2018 年底开源并移植到 .NET Core 以来,团队和我们的外部贡献者都在忙于修复旧的漏洞和添加新功能.在这篇文章中,我们将讨论 .NET 5.0 中 Win ...

  6. C# 8.0的三个令人兴奋的新特性

    C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...

  7. Elasticsearch 7.0 发布都有哪些新特性

    了解about云知识星球 .pcb{margin-right:0} 问题导读 1.Elasticsearch&Kibana 7.哪些需要修改? 2.Elasticsearch7 有哪些新特性? ...

  8. Python 3.8.0 正式版发布,新特性初体验

    北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PEP 572: Assignment Expressi ...

  9. [转]JDK1.0到12各版本新特性

    原文链接 JDK Version 1.0 1996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较差,运行速度慢.JDK Version 1.1 1 ...

  10. Android5.0中Material Design的新特性

    最近项目中需要用到Material Design,整理了下面几个常用的控件,以便记忆. 一.Snackbar 1.作用:与Toast类似,但是可以点击监听: 2.使用: (1)Snackbar调用静态 ...

随机推荐

  1. 2022Gartner容器预测:2025年85%的企业将使用容器管理服务

    近日,国际知名权威分析机构Gartner发布了最新<全球容器管理预测>.预测中指出:在加速的数字化转型驱动下,到2025年全球容器管理领域市场规模将突破14亿美元,预计年复合增长率将达到2 ...

  2. 队列的java实现

    今天老师提出一个问题,就是如何用java实现队列呢?我在网上找了许多资料,发现java也是可以很轻松的实现队列. 如下代码: package com; import java.util.Collect ...

  3. 工具分享:清理 Markdown 中没有引用的图片

    前言: 之前,我写笔记的工具一直都是 notion,而且没有写博客的习惯.但是一是由于 notion 的服务器在国外,有时候很不稳定:二是由于 notion 的分享很不方便,把笔记分享给别人点开链接之 ...

  4. 【clickhouse专栏】clickhouse性能为何如此卓越

    在<clickhouse专栏>上一篇文章中<数据库.数据仓库之间的区别与联系>,我们介绍了什么是数据库,什么是数据仓库,二者的区别联系.clickhouse的定位是" ...

  5. django框架6

    内容概要 神奇的双下划线查询 外键字段的创建 外键字段操作 多表查询 基于对象的跨表查询 基于双下划线的跨表查询 双下线查询扩展 如何查看SQL语句 内容详情 神奇的双下划线查询 1.查询年龄大于20 ...

  6. torch.rand、torch.randn、torch.normal、torch.linespace

    torch.rand(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) # ...

  7. Ubuntu安装python固定版本

    一. 安装python3.7 本篇文章使用python3.7安装步骤为例 1.直接使用apt-get安装python3.7 apt-get install python3.7 该方法经常会出现unab ...

  8. Mac Book安装Windows发烫的问题

    Mac Book安装Windows后,电脑发烫,风扇一直高速旋转.针对此问题百度搜索了一下, 大多数人说更改电源选项,由"平衡"模式改为"节能"模式,亲身体验了 ...

  9. 2.2 追求并发的极致-线程概论 -《zobolの操作系统学习札记》

    2.2 追求并发的极致-线程概论 为了追求程序运行之间的并发性,计算机科学家们发明了进程.为了进一步的追求进程内部的并发性,工程师们又提出了线程. 正是线程的出现,给予了程序员更多地操纵OS的自由,可 ...

  10. RPA应用场景-产品主数据同步

    场景概述 产品主数据同步 所涉系统名称 产品管理系统.SAP系统 人工操作(时间/次) 35分钟 所涉人工数量 3 操作频率 不定时 场景流程1.登录收购品牌产品管理系统 2.根据时间.产品分类等选择 ...