推薦關注「碼俠江湖」加星標,時刻不忘江湖事
ASP.NET Core 內置了一個強大的身份認證框架 Identity,掌握它可以讓我們快速開發高安全的身份認證功能,
不僅如此,它還是一個基于數據庫的用戶管理系統,其中包含了大量的輔助功能,可以幫助我們完成對用戶的管理。
它還可以與 IdentityServer 4 授權無縫集成,進一步開發出強大的認證授權系統。
這個系列的目的,就是快速學習和上手 Identity ,讓大家對其有一個系統的了解,內容較為精煉,不會有太多廢話。
集成?Identity
在我們創建 ASP.NET Core 應用時,可以選擇已經集成了 Identity 的項目模板。
不過,我們現在的目的是學習,所以我并不打算用項目模板來演示,而是從一個簡單的 MVC 項目,從頭開始集成 Identity。
示例項目:https://github.com/zilor-net/IdentitySample/tree/main/Sample01/Start
這個示例使用 EF Core 與數據庫交互,啟動項目時會自動遷移模型。
在?Home
?控制器中,添加了一個?Employees
?操作,用來從數據庫中查詢員工信息:

集成 Identity
我們需要做的第一件事,就是安裝?Identity EFCore
?擴展庫:
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
這個庫會幫助我們將 ASP.NET Core Identity,與現有的 EF Core 集成在一起。
安裝完成后,在?「Models」?文件夾中,創建一個?「User」?實體類:
public?class?User?:?IdentityUser
{public?string?FirstName?{?get;?set;?}public?string?LastName?{?get;?set;?}
}
這個類需要繼承 ASP.NET Core Identity 提供的?IdentityUser
?類。
IdentityUser
?類中有很多關于用戶信息的屬性,這些屬性在遷移時,都會參與到與 ASP.NET Core Identity 相關的表中。
因此,對于?「User」?類,我們只需要擴展?IdentityUser
?類,添加一些自定義的用戶屬性就可以了,這些屬性也都會添加到數據庫中。
當然,如果你覺得?IdentityUser
類中的屬性,可以滿足你的需求,那就不用創建額外的?「User」?類。
換句話說,只有在你需要對?IdentityUser
?類進行擴展時,才需要創建自定義的?「User」?類。
現在,修改?「ApplicationContext」?類:
public?class?ApplicationContext?:?IdentityDbContext<User>
{//?...protected?override?void?OnModelCreating(ModelBuilder?modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.ApplyConfiguration(new?EmployeeConfiguration());}//...
}
這里我們需要使用集成了 Identity 的?「DbContext」?類,而不是原始的?「DbContext」。
還需要在?「OnModelCreating」?方法中,調用基類的?「OnModelCreating」?方法,因為它有一些與 Identity 實體相關的配置。
配置 Identity
我們可以在?「ConfigureServices」?方法中,注冊 ASP.NET Core Identity 相關服務。
注冊的擴展方法有兩個:
builder.Services.AddIdentity<User,?IdentityRole>().AddEntityFrameworkStores<ApplicationContext>();builder.Services.AddIdentityCore<User>().AddEntityFrameworkStores<ApplicationContext>();
「AddIdentityCore」?方法,只會添加用戶管理操作,如創建用戶、散列密碼、密碼驗證等,所需的服務。
「AddIdentity」?方法,不僅會添加用戶管理服務,還會添加支持外部身份驗證,以及角色管理相關的服務。
根據你的需要,可以使用不同的方法,注冊不同的服務,這里我們使用?「AddIdentity」?方法。
還需要使用?「AddEntityFrameworkStores」?方法,注冊與 Identity 數據存儲相關的 EF Core 實現。
現在,我們需要創建一個新的遷移,在數據庫中添加 Identity 相關的表:
Add-Migration IdentityScheme
Update-Database
更新完成后,打開數據庫,可以看到多了很多 ASPNET 前綴的表。
展開?「AspNetUsers」?表的列,我們可以找到剛才?「User」?類中,自定義的兩個屬性:

不過需要注意的是,由于我們采用的是基于角色的用戶管理,而現在這個數據庫中,沒有任何角色信息。
所以,我們需要創建一些初始數據。
在數據庫中設置初始角色,是一個非常常見的操作,在?「Models\Configuration」?文件夾中,創建一個?「IdentityRole」?實體配置類:
public?class?RoleConfiguration?:?IEntityTypeConfiguration<IdentityRole>
{public?void?Configure(EntityTypeBuilder<IdentityRole>?builder){builder.HasData(new?IdentityRole{Name?=?"Guest",NormalizedName?=?"GUEST"},new?IdentityRole{Name?=?"Administrator",NormalizedName?=?"ADMINISTRATOR"});}
}
這里有兩個初始角色數據,然后在上下文中應用這個配置:
modelBuilder.ApplyConfiguration(new?RoleConfiguration());
最后,讓我們再次創建并應用遷移:
Add-Migration?InsertedRoles
Update-Database
查看數據庫中的?「AspNetRoles」?表,可以看到這里已經有了兩條角色數據。
目前為止,我們已經在項目中,初步集成了 ASP.NET Core Identity 框架,可以看到,這一點不復雜,而且非常簡單。
小結
這篇文章簡單的介紹了 Identity 框架的集成,以及一些基礎知識,下篇文章將會繼續講解用戶的注冊。
更多精彩內容,請關注我▼▼
如果喜歡我的文章,那么
在看和轉發是對我最大的支持!
(戳下面藍字閱讀)
ASP.NET 6 中間件系列
查缺補漏系統學習 EF Core 6? 系列
推薦關注微信公眾號:碼俠江湖
? ? ? ? ? ? ? ? ? ? ? ??覺得不錯,點個在看再走喲