Asp.Net Core IdentityServer4 管理面板集成

前言

       IdentityServer4(如下簡稱 Id4) 是 Asp.Net Core 中一個很是流行的 OpenId Connect 和 OAuth 2.0 框架,能夠輕鬆集成到 Asp.Net Core 應用中,而且與 Asp.Net Core Identity 也能夠輕鬆集成。博客園也有大佬發佈了不少關於 Id4 的相關文章。好比曉晨Master的系列入門教程:IdentityServer4 中文文檔與實戰,我也是看他的教程學習入門的,教程基於 .Net Core 2.x,可是影響不大。css

       可是這個教程還有一個遺憾,沒有關於如何管理 Id4 數據的部分,而 Id4 自己的數據模型仍是有點小複雜的,直接去改數據庫內心發慌,也不是長久之計。Id4 做爲開源框架也爲商業化留了一手,就是關於 Id4 的管理,須要付費才能得到 Id4 團隊準備的管理模塊。幸虧萬能的 Github 上有大神開源了自制的管理模塊。其中最著名的應該就是 Skoruba.IdentityServer4.Admin 了。這個管理模塊包含了一些基本包、3個可執行項目(主身份服務器,網頁版管理器和 Web Api 版管理器)和一個 VS 解決方案模板。從零開始搭建項目沒什麼問題,但若是已經有一個包含 Id4 的項目的狀況下要怎麼辦呢?問題就在於要如何把解決方案模板中的管理器項目移花接木到本身的主項目中,在一些狀況下,甚至可能須要把管理器直接集成到現有項目。通過一段時間的研究,終於把這個問題搞定了,在此也分享給各位園友。html

正文

       集成改造過程當中,我下載了管理項目源碼、建立了模板解決方案用做參考,也 copy 了部分代碼到個人主項目中,若是各位須要在個人演示基礎上繼續改造,也能夠提早準備這些代碼參考。同時因爲原始項目對 AutoMapper 的使用方式與 DI 集成的使用方式衝突,我沒有使用內置服務實現,使用了我改造後的服務實現。git

       接下來簡述一下個人改造步驟,因爲改造項目持續時間較長,可能有疏漏。能夠到文章末尾下載個人項目實際運行體驗。github

       一、在 Startup.ConfigureServices 中註冊 AutoMapper,由於個人配置文件分散在不一樣項目中,寫法比較特殊;改造 Id4 的 AutoMapper 相關代碼:數據庫

 1             AutoMapper.IConfigurationProvider config = new MapperConfiguration(cfg =>
 2  {  3                 var profileTypes =
 4                 from assembly in AppDomain.CurrentDomain.GetAssemblies()  5                 from type in assembly.GetTypes()  6                 where type.IsSubclassOf(typeof(Profile)) && !type.IsGenericType && !type.IsAbstract  7                 select type;  8 
 9                 var profiles = profileTypes.Select(x =>
10  { 11                         try
12  { 13                             return (Profile)Activator.CreateInstance(x); 14  } 15                         catch (MissingMethodException ex) 16  { 17                             return null; 18  } 19                         catch(Exception ex) 20  { 21                             throw ex; 22  } 23                     }).Where(x => x != null); 24  cfg.AddProfiles(profiles); 25  }); 26  services.AddSingleton(config); 27             services.AddScoped<IMapper, Mapper>();
Startup.ConfigureServices

       二、Id4 Mappers 的改造思路是去掉內置的 IMapper 實例,讓管理服務把注入的 Imapper 做爲參數傳遞給輔助方法。這裏以其中一個爲例,其餘相似的都這麼操做。把管理服務中的各類 ToModel() 和 ToEntity() 改爲 ToModel(mapper) 和 ToEntity(mapper),別忘了在服務中注入 IMapper,從源碼中拷貝服務源碼並修改。服務器

 1     public static class PersistedGrantMappers  2  {  3         //static PersistedGrantMappers()  4         //{  5         // Mapper = new MapperConfiguration(cfg => cfg.AddProfile<PersistedGrantMapperProfile>())  6         // .CreateMapper();  7         //}  8 
 9         //internal static IMapper Mapper { get; }
10 
11         public static PersistedGrantsDto ToModel(this PagedList<PersistedGrantDataView> grant, IMapper mapper) 12  { 13             return grant == null ? null : mapper.Map<PersistedGrantsDto>(grant); 14  } 15 
16         public static PersistedGrantsDto ToModel(this PagedList<PersistedGrant> grant, IMapper mapper) 17  { 18             return grant == null ? null : mapper.Map<PersistedGrantsDto>(grant); 19  } 20 
21         public static PersistedGrantDto ToModel(this PersistedGrant grant, IMapper mapper) 22  { 23             return grant == null ? null : mapper.Map<PersistedGrantDto>(grant); 24  } 25     }
View Code

       三、對比模板項目代碼和本身項目代碼進行融合,好比複製控制器、視圖、js腳本、css樣式、resx資源等各類新增文件,修改 Startup 註冊 Id4 管理的各類代碼,引入 TagHelper 等修改文件。這個部分就是須要耐心和細心,沒什麼技術含量。注意把註冊服務的代碼改爲註冊改造後的服務實現。根據須要改造視圖等等。代碼比較分散,就不貼了,有興趣的朋友去個人項目中看吧。app

效果預覽:

       地址爲:https://localhost:5001/IdentityServer/ConfigHome框架

 

        Swagger UI 地址爲:https://localhost:5001/swagger/index.html。能夠經過點擊 Authorize 按鈕登陸管理帳號,徹底可視化操做,沒有任何難度門檻。注意上面的說明,爲不一樣的登陸帳號選擇對應的 scopes,否則 Id4 會返回受權請求錯誤。一個 client 請求受權的各類資源和權限必須在 Id4 中提早登記備案,請求的權限和登記備案過的權限不一致會被駁回受權請求。ide

 

注意事項:

       一、Id4 管理模板使用了 resx 管理多語言翻譯,和我項目使用的方案不兼容,爲此我專門改造了 Asp.Net Core 本地化服務,詳情見個人博客:Asp.Net Core 混合全球化與本地化支持學習

       二、項目中保留了2個融合改造後的獨立網頁管理項目和 Web  Api 管理項目,因此本示例一共包含4個管理入口,分別是集成在主項目中的網頁和 Api 端口、獨立的網頁和 Api 端口。

       三、初始帳號中全部入口都只有 admin 有權訪問 Id4 管理端口,端口已經由 Id4 的初始設置進行保護。全部帳號的初始密碼爲:Pass123$

結語

       完成改造後,纔算是完整集成了 Id4 這個框架,永遠用教程代碼裏寫死的那些 Client 終歸不是長久之計。

 

       轉載請完整保留如下內容並在顯眼位置標註,未經受權刪除如下內容進行轉載盜用的,保留追究法律責任的權利!

  本文地址:http://www.javashuo.com/article/p-omfplmwn-hq.html

  完整源代碼:Github

  裏面有各類小東西,這只是其中之一,不嫌棄的話能夠Star一下。

原文出處:https://www.cnblogs.com/coredx/p/12318135.html

相關文章
相關標籤/搜索