翼度科技»论坛 编程开发 .net 查看内容

ASP.NET Core MVC 从入门到精通之Identity入门

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
随着技术的发展,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. 1 using DemoCoreIdentity.Data;
  2. 2 using Microsoft.AspNetCore.Identity;
  3. 3 using Microsoft.EntityFrameworkCore;
  4. 4
  5. 5 var builder = WebApplication.CreateBuilder(args);
  6. 6
  7. 7 // Add services to the container.
  8. 8 var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
  9. 9 builder.Services.AddDbContext<ApplicationDbContext>(options =>
  10. 10     options.UseSqlServer(connectionString));
  11. 11 builder.Services.AddDatabaseDeveloperPageExceptionFilter();
  12. 12
  13. 13 #region Identity
  14. 14
  15. 15 builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
  16. 16     .AddEntityFrameworkStores<ApplicationDbContext>();
  17. 17 builder.Services.AddControllersWithViews();
  18. 18
  19. 19 builder.Services.Configure<IdentityOptions>(options =>
  20. 20 {
  21. 21     // Password settings.
  22. 22     options.Password.RequireDigit = true;
  23. 23     options.Password.RequireLowercase = true;
  24. 24     options.Password.RequireNonAlphanumeric = true;
  25. 25     options.Password.RequireUppercase = true;
  26. 26     options.Password.RequiredLength = 6;
  27. 27     options.Password.RequiredUniqueChars = 1;
  28. 28
  29. 29     // Lockout settings.
  30. 30     options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
  31. 31     options.Lockout.MaxFailedAccessAttempts = 5;
  32. 32     options.Lockout.AllowedForNewUsers = true;
  33. 33
  34. 34     // User settings.
  35. 35     options.User.AllowedUserNameCharacters =
  36. 36     "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
  37. 37     options.User.RequireUniqueEmail = false;
  38. 38 });
  39. 39
  40. 40 builder.Services.ConfigureApplicationCookie(options =>
  41. 41 {
  42. 42     // Cookie settings
  43. 43     options.Cookie.HttpOnly = true;
  44. 44     options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
  45. 45
  46. 46     options.LoginPath = "/Identity/Account/Login";
  47. 47     options.AccessDeniedPath = "/Identity/Account/AccessDenied";
  48. 48     options.SlidingExpiration = true;
  49. 49 });
  50. 50
  51. 51 #endregion
  52. 52
  53. 53 var app = builder.Build();
  54. 54
  55. 55 // Configure the HTTP request pipeline.
  56. 56 if (app.Environment.IsDevelopment())
  57. 57 {
  58. 58     app.UseMigrationsEndPoint();
  59. 59 }
  60. 60 else
  61. 61 {
  62. 62     app.UseExceptionHandler("/Home/Error");
  63. 63     // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  64. 64     app.UseHsts();
  65. 65 }
  66. 66
  67. 67 app.UseHttpsRedirection();
  68. 68 app.UseStaticFiles();
  69. 69
  70. 70 app.UseRouting();
  71. 71
  72. 72 app.UseAuthentication();
  73. 73 app.UseAuthorization();
  74. 74
  75. 75 app.MapControllerRoute(
  76. 76     name: "default",
  77. 77     pattern: "{controller=Home}/{action=Index}/{id?}");
  78. 78 app.MapRazorPages();
  79. 79
  80. 80 app.Run();
复制代码
上述代码用默认选项值来配置 Identity。 可通过依赖关系注入向应用提供服务。通过调用 UseAuthentication 启用 Identity。 UseAuthentication 向请求管道添加身份验证中间件。
Identity测试

运行程序,默认打开Home/Index页面

1. 注册用户

点击注册链接,打开注册窗口,输入用户名,密码,点击注册按钮,如下所示:

 注意,如下注册校验不通过,会有错误信息提示,如下所示:

2. 登录

注册成功后,点击登录链接,即可打开登录窗口,如下所示:

 登录成功后,显示如下所示

3. 登出

点击Logout链接,可以登出,重新返回Home/Index首页,并显示未登录状态。如下所示:

身份验证

通过模板创建的项目,默认情况下,Home/Index是没有身份验证的,可以在HomeController增加Authorize特性,增加身份验证,如下所示:
  1. 1 using DemoCoreIdentity.Models;
  2. 2 using Microsoft.AspNetCore.Authorization;
  3. 3 using Microsoft.AspNetCore.Mvc;
  4. 4 using System.Diagnostics;
  5. 5
  6. 6 namespace DemoCoreIdentity.Controllers
  7. 7 {
  8. 8     [Authorize]
  9. 9     public class HomeController : Controller
  10. 10     {
  11. 11         private readonly ILogger<HomeController> _logger;
  12. 12
  13. 13         public HomeController(ILogger<HomeController> logger)
  14. 14         {
  15. 15             _logger = logger;
  16. 16         }
  17. 17
  18. 18         public IActionResult Index()
  19. 19         {
  20. 20             return View();
  21. 21         }
  22. 22
  23. 23         public IActionResult Privacy()
  24. 24         {
  25. 25             return View();
  26. 26         }
  27. 27
  28. 28         [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
  29. 29         public IActionResult Error()
  30. 30         {
  31. 31             return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
  32. 32         }
  33. 33     }
  34. 34 }
复制代码
注意,如果要对某一个action增加验证,则可以将Authorize特性添加在action上,进行更详细的身份验证。
添加成功后,再次运行程序打开Home/Index时,则会自动跳转到登录页面,如下所示:

 以上就是ASP.NET Core MVC使用Identity进行身份验证的全部内容。

来源:https://www.cnblogs.com/hsiang/archive/2023/06/17/17486806.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具