netcore Identity(一)

  • netcore Identity(一)已关闭评论
  • 209 次浏览
  • A+
所属分类:.NET技术
摘要

asp.net Core Identity提供给我们一组工具包和API,能帮助我们应用程序创建授权和认证功能。也可以用它创建账户并使用用户名和密码进行登录,同时也提供了角色和角色管理功能。


描述

asp.net Core Identity提供给我们一组工具包和API,能帮助我们应用程序创建授权和认证功能。也可以用它创建账户并使用用户名和密码进行登录,同时也提供了角色和角色管理功能。

1.创建项目

  • 配置项
    • nuget包
      • Microsoft.AspNetCore.Identity.EntityFrameWorkCore
      • Microsoft.EntityFrameworkCore.Design
      • Microsoft.EntityFrameworkCore.SqlServer
        netcore Identity(一)

  • 配置项目
Program.cs
app.UseAuthorization(); app.UseAuthorization(); 

  • 设置Asp.net Core Identity

    User类
      		User类继承IdentityUser类,位于Microsoft.AspNetCore.Identity中   	在Models文件夹中穿件AppUser类   		IdentityUser类中提供了一些用户属性,如:用户名、电子邮件、电话、密码hash值等。   	如果IdentityUser类不能满足要求,可以在AppUser中添加自定义的属性 

IdentityUser常用属性

名称 描述
ID 用户唯一ID
UserName 用户名称
Email 用户Email
PasswordHash 用户密码Hash的值
PhoneNumber 用户电话号码
SecurityStamp 当每次用户的数据修改时生成随机值
创建Database Context
DataBase Context类继承IdentityDbContext<T>类,T表示User类,在应用程序中使用AppUser,IdentityDbContext通过使用EntityFrameworkCore和数据库进行交互 
AppIdentyDbContext继承IdentityDbContext
namespace IdentityDemo1.Models {     public class AppIdentityDbContext : IdentityDbContext<AppUser>     {         public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options) : base(options)         {          }     } } 
创建数据库字符串连接

appsettings.json中配置

appsettings.json中配置数据库连接字符串
{   "Logging": {     "LogLevel": {       "Default": "Information",       "Microsoft.AspNetCore": "Warning"     }   },   "ConnectionStrings": {     "Default": "Data Source=.;Initial Catalog=IdentityDemo;Integrated Security=True;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=true"   },   "AllowedHosts": "*" }  

在AddDbContext()方法中添加AppIdentityDbContext类并且指定它使用SqlServer数据库,连接字符串从配置文件中读取

点击查看代码
builder.Services.AddDbContext<AppIdentityDbContext>(opt => {     opt.UseSqlServer(builder.Configuration["ConnectionStrings:Default"]); }); 
添加Asp.Net Identity服务
添加Asp.Net Identity服务
builder.Services.AddIdentity<AppUser, IdentityRole>()     .AddEntityFrameworkStores<AppIdentityDbContext>()     .AddDefaultTokenProviders(); 

- AddIdentity方法的参数类型指定AppUser类和IdentityRole类 - AddEntityFrameworkStore方法指定Identity使用EF作为存储和项目中使用AppIdentityContext作为Db Context - AddDefaultTokenProviders方法添加默认Token提供程序,针对重置密码,电话号码和邮件变更操作以及生成双因子认证的token - 添加了app.UseAuthentication()方法,经过这个方法的每个http请求将用户的凭据添加到Cookie中或URL中,这使得用户和它发送的http请求会产生关联。

使用EF Migration命令创建Identity数据库
nuget命令
nuget EntityFrameworkCore.Tool Add-Migration InitCreateDB update-database 

执行后的结果是
netcore Identity(一)
包含用户记录,角色,Claims,token 和登录次数详细信息等。

  • __EFMigrationsHistory:包含了前面所有的Migration
  • AspNetRoleClaims :按角色存储Claims
  • AspNetRoles:存储所有角色
  • AspNetUserClaims :存储用户的Claims
  • AspNetUserLogins :存储用户的登录次数
  • AspNetUserRoles: 存储用户的对应的角色
  • AspNetUsers:存储用户
  • AspNetUserTokens 存储外部认证的token