ASP .Net Core内置 Identity 简介 使用

news2024/11/19 22:53:04

一、简介

1、概况

        ASP.NET Core Identity是一个成员身份系统,可将用户注册和登录功能添加到 ASP.NET Core Web UI。 成员身份系统处理身份验证和授权问题。 身份验证涉及你的身份。 授权涉及允许你进行的操作。 因此,身份验证是授权的先决条件。 ASP .Net Core Identity内置了一组认证功能,用于简单的Web应用的认证和授权。

 ASP.NET Core Identity:

  • 一个 API,它支持用户界面 (UI) 登录功能。
  • 管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等等。

        Identity ASP.NET Core与Microsoft 标识平台无关。 ASP.NET Core Identity 将用户界面 (UI) 登录功能添加到 ASP.NET Core Web 应用。 若要保护 Web API 和 SPA,请使用以下项之一:

  • Azure Active Directory
  • Azure Active Directory B2C (Azure AD B2C)
  • Identity Server4

IdentityServer4 是适用于 ASP.NET Core 的 OpenID Connect 和 OAuth 2.0 框架。 IdentityServer4 支持以下安全功能:

  • 身份验证即服务 (AaaS)
  • 跨多个应用程序类型的单一登录/注销 (SSO)
  • API 的访问控制
  • Federation Gateway

2、结构

        Identity 通常使用 SQL Server 数据库进行配置,以存储用户名、密码和配置文件数据。 或者,可使用其他持久性存储,例如 Azure 表存储。Identity的层次结构如下:

在上图中:

  • ASP.NET Core Razor Pages 应用表示将在本模块中向其添加标识支持的 Web UI。
  • Identity Manager 层包含 Microsoft.AspNetCore.Identity 命名空间中使用的类。 本模块中显式使用的此类的示例是 SignInManager<TUser> 和 UserManager<TUser>
  • EF Core 标识存储区层包含 Microsoft.AspNetCore.Identity.EntityFrameworkCore 命名空间中的类。 本模块中隐式使用的此类的示例是 UserStore<TUser>
  • 数据库提供程序是一种特定于数据库的库,它接受来自 EF Core 提供程序(未示出)的 SQL 并执行它。

EF Core 使用一项称为迁移的功能来增量更新数据库架构,使其与应用的数据模型保持同步。 应用初始 EF Core 迁移后,将创建支持的数据库表。 下图描述了支持Indentity的表的架构:

3、Identity实体模型和实体间关系

Identity 模型

实体类型

Identity 模型包含以下实体类型。

实体类型说明
User表示用户。
Role表示一个角色。
UserClaim表示用户拥有的声明。
UserToken表示用户的身份验证令牌。
UserLogin将用户与登录名相关联。
RoleClaim表示向角色中所有用户授予的声明。
UserRole关联用户和角色的联接实体。

实体类型关系

实体类型通过以下方式相互相关:

  • 每个 User 可以有多个 UserClaims
  • 每个 User 可以有多个 UserLogins
  • 每个 User 可以有多个 UserTokens
  • 每个 Role 可以有多个关联的RoleClaims
  • 每个 User 可以有多个关联的 Roles,并且每个 Role 可以与多个 Users 关联。 这是一种多对多关系,需要数据库中的联接表。 联接表由 UserRole 实体表示。

二、试用

1、使用基架添加Indentity认证结构

安装基架工具

dotnet tool install dotnet-aspnet-codegenerator --version 6.0.2 --global

 向项目添加以下NuGet包

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 6.0.2
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore --version 6.0.3
dotnet add package Microsoft.AspNetCore.Identity.UI --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 6.0.3

 使用基架命令向项目添加默认标识组件。 在终端中运行以下命令:

dotnet aspnet-codegenerator identity --useDefaultUI --dbContext ProjectDbContext

 项目下,新增目录结构

Areas
 └─Identity
    ├─Data
    └─Pages
        └─Account
            └─Manage 

查看基架向项目添加的文件列表

$> dotnet aspnet-codegenerator identity --listFiles
Building project ...
Finding the generator 'identity'...
Running the generator 'identity'...
File List:
Account._StatusMessage
Account.AccessDenied
Account.ConfirmEmail
Account.ConfirmEmailChange
Account.ExternalLogin
Account.ForgotPassword
Account.ForgotPasswordConfirmation
Account.Lockout
Account.Login
Account.LoginWith2fa
Account.LoginWithRecoveryCode
Account.Logout
Account.Manage._Layout
Account.Manage._ManageNav
Account.Manage._StatusMessage
Account.Manage.ChangePassword
Account.Manage.DeletePersonalData
Account.Manage.Disable2fa
Account.Manage.DownloadPersonalData
Account.Manage.Email
Account.Manage.EnableAuthenticator
Account.Manage.ExternalLogins
Account.Manage.GenerateRecoveryCodes
Account.Manage.Index
Account.Manage.PersonalData
Account.Manage.ResetAuthenticator
Account.Manage.SetPassword
Account.Manage.ShowRecoveryCodes
Account.Manage.TwoFactorAuthentication
Account.Register
Account.RegisterConfirmation
Account.ResendEmailConfirmation
Account.ResetPassword
Account.ResetPasswordConfirmation
RunTime 00:00:08.09

文件夹和所包含的文件

  • Data/
    • RazorPagesPizzaUser.cs
  • Pages/
    • _ViewImports.cshtml
    • Account/
      • _ViewImports.cshtml
      • ConfirmEmail.cshtml
      • ConfirmEmail.cshtml.cs
      • Register.cshtml
      • Register.cshtml.cs
      • Manage/
        • _ManageNav.cshtml
        • _ViewImports.cshtml
        • EnableAuthenticator.cshtml
        • EnableAuthenticator.cshtml.cs
        • Index.cshtml
        • Index.cshtml.cs
        • ManageNavPages.cs

在配置完数据库上下文后,用EF Core更新数据库后,便可运行。

dotnet tool install dotnet-ef --version 6.0.3 --global


dotnet ef migrations add CreateIdentitySchema
dotnet ef database update

2、自定义认证

创建新用户类继承自IdentityUser(已在内部定义),并可添加自定义的属性和方法

public class RazorPagesPizzaUser : IdentityUser
{
    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; } = string.Empty;

    [Required]
    [MaxLength(100)]
    public string LastName { get; set; } = string.Empty;

    public string BirthDay {get;set;} = string.Empty;
}

根据自定义用户属性更新数据库

dotnet ef migrations add UpdateUser
dotnet ef database update

查看数据结构已添加新属性

 

 再同步更新,Register、Index等相关页面中的控件、验证信息,便可以运行

3、启用认证

在需要验证的页面中添加【Authorise】便可以启用验证了

[Authorize]
public class PizzaModel : PageModel

 

 尝试注册 一个新用户

 Register后服务端自然生成确认URL,在有外网smtp服务器的情况下,可以自动发至注册邮箱。

Email Confirmation Message
--------------------------
TO: abcd@shanghai.com
SUBJECT: Confirm your email
CONTENTS: Please confirm your account by visiting the following URL:

https://localhost:7192/Identity/Account/ConfirmEmail?userId=fc053309-f4e3-455c-9ff4-08b1842a9fc1&code=Q2ZESjhGb3puQnVsQTBGSGxadFhSUmdBZWQrdG9Tb0pKcU1CeU8vZHdLYm9ycnRYaE1hdjJZeWxoM3BJSzJoVk84TEx4VkgxME9wN3RqWldPQ0gxN1BjVjF4dGxwdkhnOGJMZ0FlWW8rZXhTYjJlSjlvaERLTXQ2eGFQb29oSGdPbWVud2hLUXRrZSs5NXpoeGZwZHdDSm5QV1FYeDdIYUI3RTl1ME9yaURiQjc4Y0YvZWRIa0xUeU1YNFYwMmpvUU9kQUQ3L3VmRy9obGJtTkNWVE10SXU1dVBQd2g4V2Y3aHhHdHBqdG8vWXNpSGJ0MFVHbHgvNVI1WmxCYmtvNlhEUE1Kdz09&returnUrl=%2F

确认后登录,便可访问所认证页面

 

 登录后就可以访问List页面

 

完成了,用户认证、授权的最简过程。 

 

三、参考文章

1、简介 - Training | Microsoft Learn

2、ASP.NET Core 中的 Identity 模型自定义 | Microsoft Learn

3、ASP.NET Core 上的 Identity 简介 | Microsoft Learn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js判断 数组中是否存在形同元素

上例子 flag true; //假设不重复&#xff1b; let arr [{ settingName: 渠道客户订单, settingCode: A1 },{ settingName: 户订单, settingCode: A1 },];for(let i 0;i < arr.length-1;i){ //循环开始元素 for(let j i 1;j < arr.length;j){ //循环后续所有元素 …

Pandoc 多Markdown转单PDF

文章目录Pandoc 简介Pandoc 安装pandoc-latex-template字体安装Powershell 脚本Ubuntu PandocMarkdown 合并Pandoc 简介 Pandoc, 免费的文档转换器, 支持常见的各种文件格式的相互转换, 如Markdown, HTML, EPUB, LaTeX, docx, RTF, PDF 等. 本篇以Windows下的多Markdown转单P…

个性化脑机接口及应用

脑机接口&#xff08;BCI&#xff09;是一种变革传统人机交互的新型技术&#xff0c;用户的大脑是直接的控制信号源。在BCI转化为实际应用时&#xff0c;由于用户个体之间的感觉、知觉、表象与认知思维活动、脑结构与功能具有一定的差异&#xff0c;通用BCI难以满足不同个体的需…

国产linux操作系统——麒麟操作系统的来龙去脉(有下载地址,亲测可用)

文章目录1、linux操作系统2、国产操作系统3、麒麟操作系统4、引用1、linux操作系统 目前市场主流的linux操作系统分类大致如此&#xff0c;国产操作系统的麒麟操作系统&#xff0c;底层比较杂&#xff0c;所以单独一类。 2、国产操作系统 排名日期截止到2022.6。 这里提一下排…

基于java SSM的房屋租赁系统设计和实现

基于java SSM的房屋租赁系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

ASO优化的两个渠道之推广+老用户维系

要想自己的APP在应用商城里获得较高的排名&#xff0c;提高用户的下载量&#xff0c;就要通过ASO优化来辅助完成。 &#xff08;一&#xff09;&#xff0c;ASO优化的排名因素——元数据的优化&#xff1a;1&#xff0c;icon图标。图片要直观和清晰地突出APP的内容&#xff0c…

力扣刷题记录——434. 字符串中的单词数、448. 找到所有数组中消失的数字、455. 分发饼干

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《434. 字符串中的单词数、448. 找到所有数组中消失的数字…

Google colab-思腾云

文章目录Google colab具体操作过程问题1问题2AutoDL问题1 无卡开机思腾云使用基础信息如何租用服务器&#xff1f;如何上传代码以及运行程序&#xff1f;操作服务器的方式&#xff1f;pycharm方式Xshell的形式问题1 libSM.so.6 和 libXrender.so.1问题2&#xff1a;运行代码出现…

Dubbo概述-快速入门

Dubbo概念 ●Dubbo是阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架。 ●致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 ●官网: http://ubbo.apache.orgo 节点角色说明: . ●Provider: 暴露服务的服务提供方 ●Contahier: 服务运行容器 ●Co…

YOLOv3论文精读: An Incremental Improvement-增量式的改进

Abstract 我们对 YOLO 进行了一系列更新&#xff01;它包含一堆小设计&#xff0c;可以使系统的性能得到更新。我们也训练了一个新的、比较大的神经网络。虽然比上一版更大一些&#xff0c;但是精度也提高了。不用担心&#xff0c;它的速度依然很快。YOLOv3 在 320320 输入图像…

【Django项目开发】部门管理模块的开发(九)

文章目录一、模型类设计二、视图设计1.都有哪些接口三、序列化器类设计四.分页操作1.utils工具中定义pagination.py2.视图类中使用五.路由配置一、模型类设计 一个部门下面可能会有很多子部门&#xff0c;一个子部门上面可能会有父部门&#xff1b;即部门内部之间进行关联&…

Grapecity DataViewsJS JavaScript Crack

Grapecity DataViewsJS一个完整的 React 数据展示和数据网格平台 通过从各种不同的演示视图中进行选择&#xff0c;包括树、卡片、砖石、网格、时间线、甘特图、日历和网格&#xff0c;超越传统的表格显示。采集 by Ω578867473 免费无限开发者许可&#xff01;只为部署付费 快…

Hexo博客搭建(简化版)

Hexo博客搭建&#xff08;简化版&#xff09; 一、环境搭建 1.1 Git Git官网-下载界面 > git --version1.2 Node.js 1.2.1 下载安装Node.js Node.js官网下载界面 > node --version1.2.2 Hexo与Node.js Hexo versionMinimum (Node.js version)Less than (Node.js …

2023年我花费数小时整理的Java常用类文档,建议收藏学习

推荐学习专栏&#xff1a;【Java 编程基础教程系列】&#xff0c;从入门到就业精通&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff01;&#xff01; 文章目录1. 基本类型的包装类1.1 概念1.2 常用的属性1.3 常用的方法1.4 自动装箱和自动拆箱2. 字符串类2.1 String 类2…

二分模板:查找数的范围、数的三次方根

内容摘自ACWING&#xff0c;一个很好的算法学习平台。 二分模板 判断左边界 当q[mid]>x时&#xff0c;待查找元素只会在mid左边&#xff0c;令rmid。 while( l < r ) {mid l r >> 1;if(q[mid] > x) r mid;else l mid 1; }判断右边界 当q[mid]<x&…

Spring项目中自动打印执行SQL和耗时,这款神级插件你值得拥有

这里写自定义目录标题参考简介集成方式如何使用步骤一&#xff0c;引入P6Spy。步骤二&#xff0c;修改数据源的配置。步骤三&#xff0c;新建spy.properties文件&#xff0c;放在resources目录下。步骤四&#xff0c;新建一个类实现MessageFormattingStrategy&#xff0c;并重写…

spring cache @Cacheable的使用

Cacheable的使用1.Cacheable1.1 cacheNames value1.2 关联多个缓存名1.3 key 和 keygenerator1.4 CacheManager CacheResolver1.5 sync1.6 condition1.7 unless2.CachePut 放置缓存3.CacheEvict 删除缓存4.测试代码5.默认缓存和redis缓存6.过程中的问题1.Cacheable 注解在方法…

剩余系,欧拉定理,扩展欧拉定理

剩余类&#xff08;同余类&#xff09; 给定一个正整数n&#xff0c;以 r ∈[0, n -1]表示所有形如的整数组成的集合称为模n的剩余类。例n 5,r 3,则C3 5x &#xff0b;3为模5的一个剩余类。 完全剩余系&#xff08;完系&#xff09; 给定一个正整数n&#xff0c;在模n的剩…

kafka生产者API

生产者工作流程 首先生产者调用send方法发送消息后&#xff0c;会先经过拦截器&#xff0c;接着进入序列化器。序列化器主要用于对消息的Key和Value进行序列化。接着进入分区器选择消息的分区。 上面这几步完成之后&#xff0c;消息会进入到一个名为RecordAccumulator的缓冲队…

javaWeb servlet

使用案例&#xff1a; <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> 导了包之…