快速掌握 ASP.NET 身份認證框架 Identity(一)

推薦關注「碼俠江湖」星標,時刻不忘江湖事

ASP.NET Core 內置了一個強大的身份認證框架 Identity,掌握它可以讓我們快速開發高安全的身份認證功能,

不僅如此,它還是一個基于數據庫的用戶管理系統,其中包含了大量的輔助功能,可以幫助我們完成對用戶的管理。

它還可以與 IdentityServer 4 授權無縫集成,進一步開發出強大的認證授權系統。

這個系列的目的,就是快速學習和上手 Identity ,讓大家對其有一個系統的了解,內容較為精煉,不會有太多廢話。

32ab19d34909ba239bfce334f339a6d1.png

集成?Identity

在我們創建 ASP.NET Core 應用時,可以選擇已經集成了 Identity 的項目模板。

不過,我們現在的目的是學習,所以我并不打算用項目模板來演示,而是從一個簡單的 MVC 項目,從頭開始集成 Identity。

示例項目:https://github.com/zilor-net/IdentitySample/tree/main/Sample01/Start

這個示例使用 EF Core 與數據庫交互,啟動項目時會自動遷移模型。

在?Home?控制器中,添加了一個?Employees?操作,用來從數據庫中查詢員工信息:

ce9e4ce09e82910e53d0e6ef6f555dad.png

集成 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」?類中,自定義的兩個屬性:

aa367174799137a04420dd653d4065da.png

不過需要注意的是,由于我們采用的是基于角色的用戶管理,而現在這個數據庫中,沒有任何角色信息。

所以,我們需要創建一些初始數據。

在數據庫中設置初始角色,是一個非常常見的操作,在?「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 框架的集成,以及一些基礎知識,下篇文章將會繼續講解用戶的注冊。

更多精彩內容,請關注我▼▼

4b3df2d7d847bb4e3502bee4b9b88fd7.gif

如果喜歡我的文章,那么

在看和轉發是對我最大的支持!

(戳下面藍字閱讀)

d971b6e3ef4c5e2a88fda8cf9044bd93.png

推薦關注微信公眾號:碼俠江湖

? ? ? ? ? ? ? ? ? ? ? ??7cd3536bcb52f7721afe2b7d3589ac12.png覺得不錯,點個在看再走喲

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

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

相關文章

淺談大型web系統架構

動態應用&#xff0c;是相對于網站靜態內容而言&#xff0c;是指以c/c、php、Java、perl、.net等服務器端語言開發的網絡應用軟件&#xff0c;比如論壇、網絡相冊、交友、BLOG等常見應用。動態應用系統通常與數據庫系統、緩存系統、分布式存儲系統等密不可分。   大型動態應用…

Android之webview長按超鏈接類型獲取鏈接文字及url、長按圖片鏈接類型分別獲取圖片和鏈接的url

1 、需求 webview長按超鏈接獲取鏈接文字及urlwebview長按圖片鏈接類型獲分別獲取圖片和鏈接的url 2、解決辦法 1)、設置webview的OnLongClickListener事件,關鍵代碼如下 companion object {const val LINK_TYPE = 1const val IMAGE_LINK_TYPE = 2}var mHandler = object :…

PostgreSQL 統計信息pg_statistic格式及導入導出dump_stat - 兼容Oracle

標簽 PostgreSQL , dump_stat , 統計信息 , 導出導入 背景 《PostgreSQL 規格評估 - 微觀、宏觀、精準 多視角估算數據庫性能(選型、做預算不求人)》 EXPLAIN是PG數據庫用于輸出SQL執行計劃的語法&#xff0c; 1、生成的執行計劃中包含COST一項。 如果校準了成本因子&#xff0…

PHP: 手把手編寫自己的 MVC 框架實例教程

1 什么是MVC MVC模式&#xff08;Model-View-Controller&#xff09;是軟件工程中的一種軟件架構模式&#xff0c;把軟件系統分為三個基本部分&#xff1a;模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。 …

freemarker 異常處理

SSH2處理方案&#xff1a; freemarker文件如果出錯&#xff0c;網站的前臺頁面會報出很明顯的錯誤-焦黃的背景&#xff0c;血紅的文字&#xff0c;很不利于用戶體驗的。如何修改這個問題呢&#xff1f;首先需要在struts.xml配置文件里添加下面一行代碼&#xff1a; 1<consta…

ArcGIS10.8按屬性選擇中根據關鍵字like模糊查詢方法總結

在實際工作中,通常需要按照某一個或某幾個關鍵字進行模糊查詢,已到達快速、準確、高效查詢的目的。在ArcGIS中是通過SQL語句,利用關鍵字like來實現的。例如我們可以借助like快速查詢滿足以某一個關鍵字開頭,以某一個關鍵字結尾,或者包含某一個關鍵字的結果。 在ArcGIS中,…

2021年復盤總結發現了C站博主缺少的賺錢之路

一、 我2021年的六大Flag 其實最開始我是不打算年終總結的&#xff0c;因為2021年我的十大Flag都沒有完成&#xff0c;我說出來可能你會嘲笑我&#xff0c;所以我打算還是說出來吧。 這六大Flag如下&#xff1a; C站百萬粉百篇實戰文其他自媒體平臺十萬粉公眾號一萬粉財務自…

五大微信小程序開發IDE深度評測

微信小程序已經內測有一段時間了&#xff0c;筆者本著好奇加學習的心態寫了幾個小demo&#xff0c;雖然在MINA框架上并沒有遇到太多的坑&#xff0c;但官方開發工具實在不敢恭維。 api提示不全&#xff0c;要一個個查api啊&#xff0c;寫代碼超級慢啊 很多必備的快捷鍵都沒有&…

Maui的學習之路(2)--Mac窗體設置

Maui的學習之路今天是我開啟Maui學習之路的第二天&#xff0c;我不是很高興又能水一篇文章&#xff0c;我只能說這文章真好水。話不多說&#xff0c;我們進入正題&#xff0c;昨天解決了Windows下TitleBar以及窗體大小的問題&#xff0c;今天同樣的問題&#xff0c;在Mac上又要…

Android之靠譜的Activity從底部向上彈出,finish從頂部向下消失(不黑屏)

1 、需求 要求Activity從底部向上彈出,finish從頂部向下消失(不黑屏) 2、解決辦法 準備3個動畫xml文件 app_bottom_in.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/andro…

ArcGIS10.8中如何獲取線狀、面狀數據的折點,并計算折點坐標?

如下圖所示為面狀要素,ArcGIS10.8中如何獲取線狀和面狀數據的折點(起點、終點、中點、端點),并計算折點的坐標(X,Y,Z,M)? 下圖所示為線狀(Polyline)和面狀(Polygon)要素的起點、終點和折點的示意圖。

Linux命令大總結(早期學習時的筆記)

Linux命令大總結 ------------------------------------------------------------------------------------ 開機自啟動命令行模式和圖形模式&#xff1a; vi /etc/inittab 改3為命令行模式 改5為圖形模式 開關機命令&#xff1a; 關機 init 0 shtudown -h now 重啟…

[轉]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]

本文轉自&#xff1a;http://binarylies.ghost.io/cordova-ionic-in-visual-studio/ Hi everyone, I thought about lending a hand to all the people that are, as I have been recently, exploring Cordova and all its features for the first time. For the ones still tr…

【轉】學會這13個原則寫UI界面文案,用戶才能秒懂

原文網址&#xff1a;http://www.niaogebiji.com/article-12011-1.html 摘要: 首先&#xff0c;在寫UI文案之前&#xff0c;為了理清思路&#xff0c;要先搞清楚三個問題&#xff1a;我&#xff08;設計師&#xff09;想讓用戶做什么&#xff1f; – 我寫文案的目的為什么要讓用…

【前端就業課 第一階段】HTML5 零基礎到實戰(一)基礎代碼結構詳解

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

【框架篇】mvc、mvp、mvvm使用關系總結

MVC MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;視圖(view)&#xff0d;控制器(controller)的縮寫&#xff0c;一種軟件設計典范&#xff0c;用一種業務邏輯、數據、界面顯示分離的方法組織代碼&#xff0c;將業務邏輯聚集到一個部件里面&#xff0c…

Blazor University (26)路由 —— 通過代碼導航

原文鏈接&#xff1a;https://blazor-university.com/routing/navigating-our-app-via-code/通過代碼導航源代碼[1]從 Blazor 訪問瀏覽器導航是通過 NavigationManager 服務提供的。這可以使用 razor 文件中的 inject 或 CS 文件中的 [Inject] 屬性注入到 Blazor 組件中。Navig…

Android之使用自定義華為掃描SDK掃描二維碼和識別本地圖片

1、需求 更具UI的設計實現掃描二維碼和識別本地圖片二維碼功能。 zxing掃描二維碼還可以,但是識別本地圖片二維碼功能效果太差,非常不理想,看了看多github很多zxing擴展的開源項目,識別本地圖片二維碼功能效果不樂觀,有些甚至還有裁剪本地圖片,還是不能識別,果斷放棄zb…

Matlab R2016b簡體中文版安裝教程(附Matlab R2016b百度網盤下載地址)

下載的Matlab R2016b軟件安裝包(文末附有下載地址)目錄如下所示: 安裝過程: 1. 安裝主程序R2016b_win64_dvd1.iso和R2016b_win64_dvd2.iso 由于目前大多數及其都是Win8或10系統,所以選中R2016b_win64_dvd1.iso,右鍵→Windows資源管理器打開。Win7系統可以安裝好壓軟件之后…

深度學習String、StringBuffer、StringBuilder

相信String這個類是Java中使用得最頻繁的類之一&#xff0c;并且又是各大公司面試喜歡問到的地方&#xff0c;今天就來和大家一起學習一下String、StringBuilder和StringBuffer這幾個類&#xff0c;分析它們的異同點以及了解各個類適用的場景。下面是本文的目錄大綱&#xff1a…