ASP.NET Core MVC 從入門到精通之Identity入門

来源:https://www.cnblogs.com/hsiang/archive/2023/06/17/17486806.html
-Advertisement-
Play Games

經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,... ...


隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。

經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,Request,Response,Session,序列化,文件上傳,自動映射,Html輔助標簽,模型校驗,鑒權、授權基礎等內容,今天繼續講解ASP.NET Core MVC 中等Identity入門相關內容,僅供學習分享使用。

什麼是Identity?

ASP.NET Core Identity是用於構建ASP.NET Core Web應用程式的身份認證系統,包括用戶數據,用戶身份以及註冊登錄信息數據存儲,可以讓您的應用擁有登錄功能以及持續化存儲登錄用戶相關數據。

ASP.NET Core Identity:

  • 一個 API,它支持用戶界面 (UI) 登錄功能。

  • 管理用戶、密碼、配置文件數據、角色、聲明、令牌、電子郵件確認等等。

用戶可使用存儲在 Identity 中的登錄信息創建帳戶,或者可使用外部登錄提供程式。支持的外部登錄提供程式包括 Facebook、Google、Microsoft 帳戶和 Twitter。

Identity 通常使用 SQL Server 資料庫進行配置,以存儲用戶名、密碼和配置文件數據。或者,可使用其他持久性存儲,例如 Azure 表存儲。

在本主題中,你將學習Identity的註冊,登錄,登出等相關應用。

 

Identity應用步驟

 1. 通過模板創建項目

選擇模板【ASP.NET Core Web應用(模型-視圖-控制器)】,然後點擊下一步

 打開配置新項目頁面,輸入【項目名稱】,然後點擊下一步

 在其他信息頁面,選擇框架【.NET 6.0(長期支持)】,身份驗證類型,選擇【個人賬戶】,然後點擊【創建】,如下所示:

 生成的項目將 ASP.NET Core Identity作為Razor類庫提供。 IdentityRazor 類庫公開具有 Identity 區域的終結點。

2. 創建資料庫

在資料庫管理器中,創建空資料庫,如下所示:

3. 修改資料庫連接字元串

在創建好後的項目中,打開項目配置文件【appsettings.json】,修改預設資料庫連字元串,如下所示:

 4. 資料庫更新遷移

通過VisualStudio打開程式包管理器控制台

 ,輸入以下命令【Update-Database】,進行資料庫遷移,如下所示:

 待執行數據遷移成功後,打開剛剛創建的資料庫,發現多出了幾個表,如下所示:

 如此,則表示遷移成功。

之所以能夠遷移成功,是因為模板在創建項目時,已經為我們創建了初始化腳本,如下所示:

5. 配置Identity服務

根據官方文檔,註入Identity相關服務,如下所示:

 1 using DemoCoreIdentity.Data;
 2 using Microsoft.AspNetCore.Identity;
 3 using Microsoft.EntityFrameworkCore;
 4 
 5 var builder = WebApplication.CreateBuilder(args);
 6 
 7 // Add services to the container.
 8 var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
 9 builder.Services.AddDbContext<ApplicationDbContext>(options =>
10     options.UseSqlServer(connectionString));
11 builder.Services.AddDatabaseDeveloperPageExceptionFilter();
12 
13 #region Identity
14 
15 builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
16     .AddEntityFrameworkStores<ApplicationDbContext>();
17 builder.Services.AddControllersWithViews();
18 
19 builder.Services.Configure<IdentityOptions>(options =>
20 {
21     // Password settings.
22     options.Password.RequireDigit = true;
23     options.Password.RequireLowercase = true;
24     options.Password.RequireNonAlphanumeric = true;
25     options.Password.RequireUppercase = true;
26     options.Password.RequiredLength = 6;
27     options.Password.RequiredUniqueChars = 1;
28 
29     // Lockout settings.
30     options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
31     options.Lockout.MaxFailedAccessAttempts = 5;
32     options.Lockout.AllowedForNewUsers = true;
33 
34     // User settings.
35     options.User.AllowedUserNameCharacters =
36     "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
37     options.User.RequireUniqueEmail = false;
38 });
39 
40 builder.Services.ConfigureApplicationCookie(options =>
41 {
42     // Cookie settings
43     options.Cookie.HttpOnly = true;
44     options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
45 
46     options.LoginPath = "/Identity/Account/Login";
47     options.AccessDeniedPath = "/Identity/Account/AccessDenied";
48     options.SlidingExpiration = true;
49 });
50 
51 #endregion
52 
53 var app = builder.Build();
54 
55 // Configure the HTTP request pipeline.
56 if (app.Environment.IsDevelopment())
57 {
58     app.UseMigrationsEndPoint();
59 }
60 else
61 {
62     app.UseExceptionHandler("/Home/Error");
63     // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
64     app.UseHsts();
65 }
66 
67 app.UseHttpsRedirection();
68 app.UseStaticFiles();
69 
70 app.UseRouting();
71 
72 app.UseAuthentication();
73 app.UseAuthorization();
74 
75 app.MapControllerRoute(
76     name: "default",
77     pattern: "{controller=Home}/{action=Index}/{id?}");
78 app.MapRazorPages();
79 
80 app.Run();

上述代碼用預設選項值來配置 Identity。 可通過依賴關係註入嚮應用提供服務。通過調用 UseAuthentication 啟用 Identity。 UseAuthentication 向請求管道添加身份驗證中間件。

Identity測試

運行程式,預設打開Home/Index頁面

1. 註冊用戶

點擊註冊鏈接,打開註冊視窗,輸入用戶名,密碼,點擊註冊按鈕,如下所示:

 註意,如下註冊校驗不通過,會有錯誤信息提示,如下所示:

2. 登錄

註冊成功後,點擊登錄鏈接,即可打開登錄視窗,如下所示:

 登錄成功後,顯示如下所示

3. 登出

點擊Logout鏈接,可以登出,重新返回Home/Index首頁,並顯示未登錄狀態。如下所示:

身份驗證

通過模板創建的項目,預設情況下,Home/Index是沒有身份驗證的,可以在HomeController增加Authorize特性,增加身份驗證,如下所示:

 1 using DemoCoreIdentity.Models;
 2 using Microsoft.AspNetCore.Authorization;
 3 using Microsoft.AspNetCore.Mvc;
 4 using System.Diagnostics;
 5 
 6 namespace DemoCoreIdentity.Controllers
 7 {
 8     [Authorize]
 9     public class HomeController : Controller
10     {
11         private readonly ILogger<HomeController> _logger;
12 
13         public HomeController(ILogger<HomeController> logger)
14         {
15             _logger = logger;
16         }
17 
18         public IActionResult Index()
19         {
20             return View();
21         }
22 
23         public IActionResult Privacy()
24         {
25             return View();
26         }
27 
28         [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
29         public IActionResult Error()
30         {
31             return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
32         }
33     }
34 }

註意,如果要對某一個action增加驗證,則可以將Authorize特性添加在action上,進行更詳細的身份驗證。

添加成功後,再次運行程式打開Home/Index時,則會自動跳轉到登錄頁面,如下所示:

 以上就是ASP.NET Core MVC使用Identity進行身份驗證的全部內容。


作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 概述 Nginx 是一個高性能的 HTTP 和反向代理伺服器,特點是占用記憶體少,併發能力強 #### 1. 正向代理 如果把區域網外的 Internet 想象成一個巨大的資源庫,則區域網中的客戶端要訪問 Internet,需要通過代理伺服器來訪問,這種訪問就稱為正向代理 ![](https:/ ...
  • # 類和對象 **組成結構** • 構造函數: 在創建對象的時候給屬性賦值 • 成員變數: • 成員方法(函數) • 局部變數 • 代碼塊 ## 構造器 每個類都有一個主構造器,這個構造器和類定義"交織"在一起類名後面的內容就是主構造器,如果參數列表為空的話,()可以省略 scala的類有且僅有一個 ...
  • ## 1.常用命令 `創建項目:django-admin startproject 項目名` `創建APP(進入工程目錄):python manage.py startapp 網站名` `創建庫表(進入工程目錄):python manage.py makemigrations` `執行庫表建立(進入 ...
  • # Go 語言之自定義 zap 日誌 [zap 日誌](https://github.com/uber-go/zap):https://github.com/uber-go/zap ## 一、日誌寫入文件 - `zap.NewProduction`、`zap.NewDevelopment` 是預設配 ...
  • (續前文) ## 9、Service實現類代碼示例 ​ ​ 以用戶管理模塊為例,展示Service實現類代碼。用戶管理的Service實現類為UserManServiceImpl。​UserManServiceImpl除了沒有deleteItems方法外,具備CRUD的其它常規方法。實際上​User ...
  • 本文主要介紹在之家廣告業務系統中運用任務編排治理工具的場景及其可以解決的問題,講解任務編排框架的核心要點,以及向大家演示一個任務編排框架的基本結構,讓大家對任務編排工具增強業務開發效率,提高研發質量有更深刻的理解。 ...
  • # Go 語言之 zap 日誌庫簡單使用 ## 預設的 Go log log:https://pkg.go.dev/log ```go package main import ( "log" "os" ) func init() { log.SetPrefix("LOG: ") // 設置首碼 f, ...
  • ## 前言 使用 ABP vNext(下文簡稱 ABP)時,通常都是從 cli 開始新建模板,從一個空項目開始。對已經存續的項目來說,現有的數據,特別是用戶等核心數據需要進行遷移。 老的項目,隨著規模越來越大,每次修改都需要更改非常多地方,最重要的是,共用資料庫使得維護起來需要小心翼翼。為了後續維護 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...