什么是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這樣實現接口,然后封裝成這三個類就好了。或者封裝成其他的什么類。這三個類是在圖上的位置注入進入的。

