Asp.Net Core之Identity源碼學習


什么是Identity

ASP.NET Identity是構建核心 Web 應用程序(ASP.NET、登錄和用戶數據)的成員系統。ASP.NET核心標識允許您向應用程序添加登錄功能,並可以輕松自定義有關登錄用戶的數據。

源碼鏈接 Github鏈接

用我的話說就是一個權限管理模塊,可以提供使用ef持久化儲存數據的功能。包含了用戶管理,角色管理,用戶憑證管理,角色憑證管理,以及各種第三方登錄儲存。

源碼結構

源碼主要包含一些接口定義,然后就是接口的封裝,在這里我推薦一篇很不錯的文章,比我講的都要詳細。

感覺不錯的文章

我們來看看源碼結構

Microsoft.Extensions.Identity.Stores 和 Microsoft.Extensions.Identity.Core里面的代碼是重點 尤其是Microsoft.Extensions.Identity.Core里的那些定義的接口

  • IQueryableRoleStore
  • IQueryableUserStore
  • IRoleClaimStore
  • IRoleStore
  • IUserAuthenticationTokenStore
  • IUserClaimStore
  • IUserEmailStore
  • IUserLockoutStore
  • IUserLoginStore
  • IUserPasswordStore
  • IUserPhoneNumberStore
  • IUserRoleStore
  • IUserSecurityStampStore
  • IUserStore
  • IUserTwoFactorStore

我們以IuserRoleStore接口為例

IUserRoleStore繼承了IUserStore接口 好多接口都繼承了IUserStore 因為這個是關於用戶的最初的接口當其他的接口都繼承這個的時候我們可以通過定義一個子類繼承其他接口那我們就可以實現這些接口來實現具體的功能了

說到這我們就來看一個實現了功能的類

UserStoreBase這個抽象類算是繼承了好多的接口 其中就包含IQueryableUserStore接口 這個接口算是為了查找數據定義的 因為這個接口就一個Users屬性

另外的UserStore接口又繼承了這個UserStoreBase接口

說着這里的實現其實到這里整個調用這些實現的方法就可以用了,把他們注入到DI容器然后就可以開心的使用了,如下圖。官方就是這樣操作的。但是可能涉及的接口比較多,源碼里就把好多的操作接口給封裝成那最經典的三個類了。

在UserStore里注入了Ef的數據上下文,也就是說對數據庫的增刪改查在UserStore里就已經完成了。

然后就是那最重要的三個類了這三個類算是對UserStore RoleStore那些功能再次封裝了,這樣在使用方面就注入這個三個類就可以實現所有的功能了。具體的功能大家看看涉及的源碼細節。如果有看不懂的,請看我下面的動圖示例演示代碼,對理解源碼有幫助。

SignInManager

UserManager

RoleManager

在源碼里使用了很多的將IUserStore轉換成其他子接口的使用方法,這大概是叫里氏替換原則吧。大家如果想實現一套自己的,可以定義好接口然后像identity這樣實現接口,然后封裝成這三個類就好了。或者封裝成其他的什么類。這三個類是在圖上的位置注入進入的。

關於權限系統的概念,我想做的系統是有三個概念,一個用戶,一個角色,一個資源,這個資源可以是聲明憑證,也可以是具體的權限,也可以是一些菜單的權限,其實和identity里的claim很像。用戶可以擁有很多的角色,也可以擁有很多的資源,角色也可以擁有很多的資源,用戶的總資源等於角色資源和用戶資源的並集。

此文章算是學習筆記了,不喜歡的求輕噴。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM