Identity是在.net中一个很有历史感的身份验证技术,在.NetFramework2.0(不是.net core 2.0)就诞生了,本次.NET第7个预版,带到了API框架中。
Identity的使用很简单,添加授权验证的中间件,然后再添加Identity的中间件,同时增加它标志性的那几张表(存放用户,角度等信息),本例中是用sqlite来存放数据。.
using Microsoft.AspNetCore.Identity;using Microsoft.AspNetCore.Identity.EntityFrameworkCore;using Microsoft.EntityFrameworkCore;using System.Security.Claims;var builder = WebApplication.CreateSlimBuilder(args);builder.Services.AddAuthentication().AddBearerToken(IdentityConstants.BearerScheme);builder.Services.AddAuthorizationBuilder();builder.Services.AddIdentityCore<IdentityUser>().AddEntityFrameworkStores<IdentityDbContext>().AddApiEndpoints();var dbPath = string.Format("Data Source={0}\\db.sqlite", Directory.GetCurrentDirectory());builder.Services.AddDbContext<IdentityDbContext>(options => options.UseSqlite(dbPath));var app = builder.Build();app.MapIdentityApi<IdentityUser>();app.MapGet("/", (ClaimsPrincipal user) => $"欢迎:{user.Identity!.Name}").RequireAuthorization();app.Run();
表名称如下,具体生成方式可参见EF的CodeFirst:

CREATE TABLE AspNetUsers (Id TEXT NOT NULLCONSTRAINT PK_AspNetUsers PRIMARY KEY,AccessFailedCount INTEGER NOT NULL,ConcurrencyStamp TEXT,Email TEXT,EmailConfirmed INTEGER NOT NULL,LockoutEnabled INTEGER NOT NULL,LockoutEnd TEXT,NormalizedEmail TEXT,NormalizedUserName TEXT,PasswordHash TEXT,PhoneNumber TEXT,PhoneNumberConfirmed INTEGER NOT NULL,SecurityStamp TEXT,TwoFactorEnabled INTEGER NOT NULL,UserName TEXT);

登录API:



Identity在API框架项目中还只是开始阶段,功能也非常有限,但对于一些小项目,开箱即用还是非常用好处的。
之前有一个关于Identity的系列,请参照: