首页 > 编程语言 >ASP.NET Core MVC 从入门到精通之Identity入门

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

时间:2023-06-17 16:56:00浏览次数:45  
标签:Core ASP 入门 app NET options Identity

随着技术的发展,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进行身份验证的全部内容。

标签:Core,ASP,入门,app,NET,options,Identity
From: https://www.cnblogs.com/hsiang/p/17486806.html

相关文章

  • ASP.NET MVC 性能优化和调试
    学习.NETCore应用程序的调试技术可以分为以下步骤:理解基础概念:首先,你需要理解什么是调试以及为什么我们需要调试。理解断点、单步执行、变量监视等基本调试概念。学习VisualStudioCode的调试功能:VisualStudioCode是一个流行的开发环境,它有强大的.NETCore调试支持。......
  • MongoDB入门操作
    数据库操作查看所有数据库--->showdbs通过use关键字切换数据库--->usetestdb删除数据库--->db.dropDatabase()新增数据db.COLLECTION_NAME.insert(document)注意事项:在MongoDB中,存储的文档结构是一种类似于json的结构,称之为bson(全称为:BinaryJSON)如:{id:2,userna......
  • MongoDB入门介绍
    MongoDB简介MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库数据特征数据存储量较大,甚至是海量对数据读写的响应速度要求较高某些数据安全性要求不高,可以接受一定范围内的误差MongoDB存储......
  • 群论入门
    前言在OI中只会用到群论的一个定理和一个引理来进行本质不同计数:Burnside引理与Polya定理,其它的只是为了让你更好的去理解这两大模块。这部分其实我也是一知半解,所以有些证明我就不写了。群定义给定集合\(G\)和作用于集合\(G\)的二元运算\(\times\)(注意,此\(\times......
  • .Net Core医学检验LIS系统源码
    .NetCoreLIS系统源码,在第三方快检实验室、二级医院检验科应用5年以上,系统运行稳定、功能齐全,界面布局合理、操作简便。系统采用B/S架构SaaS模式,可扩展性强。LIS系统为实验室服务对象提供检验申请、采集标本、结果查询等功能;为实验室工作人员的核收标本、分送标本、传送资料、分析......
  • JSON Web Token 入门教程
     JSONWebToken(缩写JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、......
  • 网络流入门手册
    前言由于网络流极其庞大而资料有限,我决定用这个博客先记录一下我学习的大纲,在后期有可能补上内容。对于网上可以找到的,我就一笔带过,只是说明应该了解这个东西;而对于网上难以找到的一些资料,我会尽我所能写出来。大纲基本概念网络最大流-增广路类最大流最小割定理:内容与证......
  • .net core 中使用Redis,及Redis问题
    1.安装Microsoft.Extensions.Caching.StackExchangeRedis包2.//分布式缓存  在startup的ConfigureServices中注入redis                               services.AddStackExchangeRedisCache(options=> ......
  • .NET CORE 核心概念:深入理解依赖注入
    1.为什么要用依赖注入(DI)什么是依赖注入,为什么要使用呢?简单通俗说就是一个类需要另一个类来协助工作,就产生了依赖,所以需要的依赖项就要【注入】过来一起来协同完成工作。 软件设计原则中有一个依赖倒置原则(DIP)讲的是要依赖于(1)抽象,不要依赖于具体,(2)高层模块不应该依赖于低层模......
  • Mark Fan:A computational model study on the mechanical response mechanism of asp
    WuhanJiangxiaRoadandBridgeEngineeringCo.,LtdSchoolofCivilEngineeringandArchitecture,WuhanInstituteofTechnologyMarkFan 15927602711Introduction:Asphaltisacommonlyusedmaterialinroadconstruction,anditsmechanicalpropertiespl......