ASP .Net Core内置 Identity 简介 使用

一、简介

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: [email protected]
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

猜你喜欢

转载自blog.csdn.net/zhujisoft/article/details/128626268
今日推荐