共计 7118 个字符,预计需要花费 18 分钟才能阅读完成。
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/c… 接口如下:
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。
另外讲下怎么将 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/abpframewo…
[2]ABP 路线图:https://docs.abp.io/zh-Hans/a…
[3]ABP 6.0.0-rc.1 最近公布日志:https://github.com/abpframewo…
[4]ABP.IO Platform 6.0 RC Has Been Published:https://blog.abp.io/abp/ABP.I…
[5]ABP 框架性能:https://abp.io/features
**[6]Add OpenIddict module:https://github.com/abpframewo…
[7]ABP OpenIddict Modules:https://github.com/abpframewo…
[8]Announcement of plan to replace the IdentityServer:https://github.com/abpframewo…
[9]ABP OpenIddict Modules:https://docs.abp.io/zh-Hans/a…
[10]Migration Identity Server to OpenIddict Guide:https://docs.abp.io/en/abp/6….
[11]OpenIddict:https://github.com/openiddict
[12]OpenIddict 官网文档:https://documentation.openidd…
[13]openiddict/openiddict-core:https://github.com/openiddict…
[14]openiddict/openiddict-samples:https://github.com/openiddict…
[15]openiddict/openiddict-documentation:https://github.com/openiddict…**
[16]Integrated MAUI application startup template:https://github.com/abpframewo…
[17]LeptonX Theme:https://x.leptontheme.com/
[18]ASP.NET Core MVC/Razor Pages: The Basic Theme:https://docs.abp.io/en/abp/la…
[19]LeptonX Lite MVC UI:https://docs.abp.io/en/abp/la…
[20]ASP.NET Core MVC/Razor Pages: UI Theming:https://docs.abp.io/en/abp/la…
[21]abp-samples/Ids2OpenId:https://github.com/abpframewo…
[22]Fair Trade Software License:https://blog.duendesoftware.c…
[23]批改后的 OpenIddict 模块源码:https://url39.ctfile.com/f/25… (拜访明码: 2096)
本文由 mdnice 多平台公布