ABP 6.0.0-rc.1的新特性

??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.基本主題

基本主題的樣子如下:724cf60187133c22f8fda90a5c53bb79.png??基本主題在使用的時候都安裝了哪些包呢?主要是在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的樣子如下:468e17be6bd324e50ea043a70b44725f.pngLeptonX 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.Globalbundle =>{bundle.AddFiles("/global-styles.css");});
});

??ABP商業版的LeptonX Theme樣子如下:1d3899629dd4cfe9977b82fdb6ea8ad1.png說明:因為平時在開發中使用的前后端分離方式,所以對這塊不做過多介紹,了解即可。如果感興趣,可以深入的學習下Razor Pages、Blazor、Bootstrap、jQuery等技術。

二.OpenIddict模塊

??這次ABP 6.0.0-rc.1較大的一個變化就是開始使用OpenIddict代替IDS(IdentityServer),因為IDS要收費了。ABP封裝的OpenIddict模塊源碼結構如下:20de7838dc48baa90548702e3aad0659.png

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接口如下:4db053b4da71106d16b484660e84cdaa.png??OpenIddict.Demo.Server項目啟動后,生成的數據庫OpenIddict-Demo-Server如下:9851d09f544737802ab6cc84155f135f.png

2.Volo.Abp.OpenIddict模塊

e4918628f06222fc4bf469a7bbca18da.png4個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版本了:c349b1ee1f5a6a40d877253c8f05c299.png

四.將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.*包替換VoloIdentityServer.*包。比如,Volo.Abp.IdentityServer.DomainVolo.Abp.OpenIddict.DomainVolo.Abp.Account.Web.IdentityServerVolo.Abp.Account.Web.OpenIddict
(3)使用相應的OpenIddict模塊替換所有IdentityServer模塊。比如,AbpIdentityServerDomainModuleAbpOpenIddictDomainModuleAbpAccountWebIdentityServerModuleAbpAccountWebOpenIddictModule
(4)在ProjectNameDbContext類中,重命名ConfigureIdentityServerConfigureOpenIddict
(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)將IdentityServerDataSeedContributorDomain項目中刪除。
(9)創建新版本的項目,并且與現有項目同名。
(10)拷貝新項目的ProjectName.Domain\OpenIddict\OpenIddictDataSeedContributor.cs到項目中,并且基于ProjectName.DbMigrator\appsettings.json來更新appsettings.json,注意修改端口號。
(11)如果在IndexModel中使用IClientRepository,那么拷貝新項目的Index.cshtml.csIndex.cs到項目中。
(12)在AddAbpOpenIdConnect()方法中,更新scope的名字從roleroles
(13)在HttpApi.Host項目中,刪除options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);
(14)AuthServer不再要求JWT bearer authentication,需要刪除它,比如AddJwtBearerUseJwtTokenMiddleware
(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就不錯:4f7a7bcdc20c8118a2ec6859f8dc5099.png

參考文獻:
[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)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283915.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283915.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283915.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java并發包--線程池框架

轉載請注明出處&#xff1a;http://www.cnblogs.com/skywang12345/p/3509903.html 線程池架構圖 線程池的架構圖如下&#xff1a; 1. Executor 它是"執行者"接口&#xff0c;它是來執行任務的。準確的說&#xff0c;Executor提供了execute()接口來執行已提交的 Runna…

c 試水解碼jpeg圖片比特流(已成功解碼)

找到一張采用霍夫曼通用DC,AC編碼表的圖片&#xff0c;提取出此圖片的比特流準備對它解碼&#xff0c;再反推怎樣編碼。 下圖是此圖片比特流前100個字節。解碼是每次讀一字節&#xff0c;對這8比特解碼&#xff0c;如8比特不能解碼&#xff0c;再讀入一字節。因為霍夫曼表最多…

Raft算法詳解

Raft算法屬于Multi-Paxos算法&#xff0c;它是在Multi-Paxos思想的基礎上&#xff0c;做了一些簡化和限制&#xff0c;比如增加了日志必須是連續的&#xff0c;只支持領導者、跟隨者和候選人三種狀態&#xff0c;在理解和算法實現上都相對容易許多 從本質上說&#xff0c;Raft算…

淘寶彈性布局方案lib-flexible研究

1. lib-flexible不能與響應式布局兼容 先說說響應式布局的一些基本認識&#xff1a; 響應式布局的表現是&#xff1a;網頁通過css媒介查詢判斷可視區域的寬度&#xff0c;在不同的范圍應用不同的樣式&#xff0c;以便在不同尺寸的設備上呈現最佳的界面效果。典型的例子是&#…

[No0000DB]C# FtpClientHelper Ftp客戶端上傳下載重命名 類封裝

using System; using System.Diagnostics; using System.IO; using System.Text; using Shared;namespace Helpers {public static class FileHelper{#region Methods/// <summary>/// 向文本文件的尾部追加內容/// </summary>/// <param name"filePa…

WPF效果第一百九十四篇之伸縮面板

前面一篇玩耍了一下登錄實現效果;今天在原來的基礎上來玩耍一下伸縮面板的效果;閑話不多扯直接看效果:1、關于前臺簡單布局:2、左側面板伸縮動畫&#xff1a;<Storyboard x:Key"ShowConfigSb"><ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty…

你不知道的JavaScript(二)

第三章 原生函數 JS有很多原生函數&#xff0c;為基本的數據類型值提供了封裝對象&#xff0c;String&#xff0c;Number&#xff0c;Boolean等。我們可以通過{}.call.toString()來查看所有typeof返回object的對象的內置屬性[[class]],這個屬性無法直接訪問。我們基本類型調用的…

[轉]guava快速入門

Guava工程包含了若干被Google的 Java項目廣泛依賴 的核心庫&#xff0c;例如&#xff1a;集合 [collections] 、緩存 [caching] 、原生類型支持 [primitives support] 、并發庫 [concurrency libraries] 、通用注解 [common annotations] 、字符串處理 [string processing] 、I…

數據庫編程1 Oracle 過濾 函數 分組 外連接 自連接

【本文謝絕轉載原文來自http://990487026.blog.51cto.com】<大綱>數據庫編程1 Oracle 過濾 函數 分組 外連接 自連接本文實驗基于的數據表:winsows安裝好Oracle11g之后,開始實驗SQLplus 登陸 ORaclesqlplus 退出的方式查看用戶之下有什么表查看表的所有記錄&#xff0c;不…

【.NET 6】開發minimal api以及依賴注入的實現和代碼演示

前言&#xff1a;.net 6 LTS版本發布已經有一段時間了。此處做一個關于使用.net 6 開發精簡版webapi&#xff08;minimal api&#xff09;的入門教程演示。1、新建一個項目。此處就命名為 SomeExample:2、選擇 .net6版本&#xff0c;并且此處先去掉HTTPS配置以及去掉使用控制器…

(轉載)VS2010/MFC編程入門之四(MFC應用程序框架分析)

上一講雞啄米講的是VS2010應用程序工程中文件的組成結構&#xff0c;可能大家對工程的運行原理還是很模糊&#xff0c;理不出頭緒&#xff0c;畢竟跟C編程入門系列中的例程差別太大。這一節雞啄米就為大家分析下MFC應用程序框架的運行流程。 一.SDK應用程序與MFC應用程序運行過…

個人博客開發-開篇

邁出第一步&#xff1a; 很久以前就有這個想法&#xff0c;自己動手開發一套個人博客系統&#xff0c;終于&#xff0c;現在開始邁出了第一步。做這件事一點是做一個有個人風格的博客系統&#xff0c;第二點是對做這件事所使用的技術棧進行學習&#xff0c;所謂最好的學習就是實…

2022年中國中小學教育信息化行業研究報告

教育信息化丨研究報告 核心摘要&#xff1a; 背景篇 目前&#xff0c;我國中小學教育主要呈現信息時代教育的特征&#xff0c;智能時代教育特征初露端倪&#xff1b;中小學教育信息化正從量變邁向質變&#xff0c;創新引領與生態變革成為行業縱深的主旋律&#xff1b; 2021年…

使用curl指令發起websocket請求

昨日的文章沒指出websocket請求協商切換的精髓&#xff0c;刪除重發。前文相關&#xff1a;? .NET WebSockets 核心原理初體驗[1]? SignalR 從開發到生產部署避坑指南[2]tag&#xff1a;瀏覽器--->nginx--> server其中提到nginx默認不會為客戶端轉發Upgrade、Connectio…

Yii 2 的安裝 之 踩坑歷程

由于剛接觸yii2 ,決定先裝個試試&#xff1b;可是這一路安裝差點整吐血&#xff0c;可能還是水平有限吧&#xff0c; 但還是想把這個過程分享出來&#xff0c;讓遇到同樣問題的同學有個小小的參考&#xff0c;好了言歸正傳&#xff01;&#xff01; <(~.~)> 下面是安裝流…

設計模式之代理模式(上) 靜態代理與JDK動態代理

2019獨角獸企業重金招聘Python工程師標準>>> 代理模式 給某一個對象提供一個代理&#xff0c;并由代理對象控制對原對象的引用。靜態代理 靜態代理是由我們編寫好的類&#xff0c;在程序運行之前就已經編譯好的的類&#xff0c;此時就叫靜態代理。 說理論還是比較懵…

mysql 分頁查詢

使用limit函數 limit關鍵字的用法&#xff1a; LIMIT [offset,] rows offset指定要返回的第一行的偏移量&#xff0c;rows第二個指定返回行的最大數目。初始行的偏移量是0(不是1)。轉載于:https://www.cnblogs.com/xping/p/6703986.html

WPF 實現更換主題色

WPF 實現更換主題色WPF 使用 WPFDevelopers.Minimal 如何更換主題色作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&a…

vue3與vue2的區別

先來說說當下市場開發使用的問題&#xff0c;目前2021年使用vue3開發的企業還是少&#xff0c;基本上都還是以vue2的形式進行開發&#xff0c;vue3的開發模式跟react很像&#xff0c;這時候有人就會想那我學vue3有用么&#xff0c;淦&#xff0c;他喵的&#xff0c;先別激動&am…