經過前幾篇文章的講解,初步瞭解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/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章