ASP.NETCore-中间件Middleware(七)_认证中间件-Identity组件库与Claims身份信息
一、序言
Identity:身份组件库;使用管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等。
二、常用成员(WebAPI;无UI)
1、部分方法(知道即可;我的框架中没有用这些)
全部方法见:Microsoft.
//Microsoft.AspNetCore.Identity.IdentityBuilder; // 用于配置标识服务的帮助程序函数。
//Microsoft.AspNetCore.Identity.IdentityCookiesBuilder; //用于配置标识 Cookie 选项。
//Microsoft.AspNetCore.Identity.ClaimsIdentityOptions; // 用于配置用于已知声明的声明类型的选项。
//Microsoft.AspNetCore.Identity.UserOptions; // 用于用户验证的选项。
//Microsoft.AspNetCore.Identity.UserClaimsPrincipalFactory; // 提供为给定用户创建声明主体的方法。
//Microsoft.AspNetCore.Identity.SignInOptions; // 用于配置登录的选项。
//Microsoft.AspNetCore.Identity.SignInManager; // 提供用于用户登录的 API。
//Microsoft.AspNetCore.Identity.SignInResult; // 表示登录操作的结果。
//Microsoft.AspNetCore.Identity.RoleStoreBase; // 为角色创建持久性存储的新实例。
//Microsoft.AspNetCore.Identity.RoleManager; // 提供用于在持久性存储中管理角色的 API。
//Microsoft.AspNetCore.Identity.RoleValidator; // 提供角色的验证服务。
//Microsoft.AspNetCore.Identity.UserStoreBase; // 为用户创建持久性存储的新实例。
//Microsoft.AspNetCore.Identity.UserLoginInfo; // 表示用户记录的登录信息和源。
//Microsoft.AspNetCore.Identity.UserManager; // 提供用于在持久性存储中管理用户的 API。
//Microsoft.AspNetCore.Identity.UserValidator; // 为用户类提供验证服务。
//Microsoft.AspNetCore.Identity.PasswordOptions; // 指定密码要求的选项。
//Microsoft.AspNetCore.Identity.PasswordHasher; // 实现标准标识密码哈希。
//Microsoft.AspNetCore.Identity.PasswordHasherOptions; // 指定用于密码哈希的选项。
//Microsoft.AspNetCore.Identity.PasswordHasherCompatibilityMode; // 指定用于对密码进行哈希处理的格式。
//Microsoft.AspNetCore.Identity.PasswordValidator; // 提供标识的默认密码策略。
//Microsoft.AspNetCore.Identity.PasswordVerificationResult; // 指定密码验证的结果。
//Microsoft.AspNetCore.Identity.TokenOptions; // 用户令牌的选项。
//Microsoft.AspNetCore.Identity.TokenProviderDescriptor; // 用于表示 的 TokenMap 中的 TokenOptions令牌提供程序。
//Microsoft.AspNetCore.Identity.StoreOptions; // 用于存储特定选项
//Microsoft.AspNetCore.Identity.AspNetRoleManager; // 提供用于在持久性存储中管理角色的 API。
//Microsoft.AspNetCore.Identity.AspNetUserManager; // 提供用于在持久性存储中管理用户的 API。
2、ClaimsPrincipal-记录用户身份(重点):
- ClaimsPrincipal:证件持有者;ClaimsPrincipal 是 ClaimsIdentity 的持有者,就像我们拥有身份证一样。可以包含多个的 ClaimsIdentity。
- ClaimsIdentity:证件;所有的 Claim身份信息 最终组成了我们的 身份证ClaimsIdentity。
- Claims:每一项的证件信息;可以存放我们的姓名、性别、民族、出生日期、家庭住址、身份证号等身份信息,每一项数据的都可以看成是 type-value(数据类型-数据值)。
- ClaimsIdentity:证件;所有的 Claim身份信息 最终组成了我们的 身份证ClaimsIdentity。
(1)使用示例
var claims = new List<Claim> // 维护用户信息
{
new Claim(ClaimTypes.Name, "2806933146@qq.com"),
new Claim("FullName", "执笔小白"), // key-value形式赋值
new Claim(ClaimTypes.Role, "Administrator"),
};
var claimsIdentity = new ClaimsIdentity( // claims添加到claimsIdentity
claims, CookieAuthenticationDefaults.AuthenticationScheme)
;
var claimsPrincipal = new ClaimsPrincipal( // claimsIdentity添加到claimsPrincipal
claimsIdentity);
3、Identity 自定义配置(一些Identity自带认证功能的实现)
有些框架作者会用到这些东西,“自定义配置Identity ”算是淘汰掉的鸡肋东西。
#region 旧的配置方式-IdentityUser 结构分析
new IdentityUser()
{
//PasswordHash = "", // 密码的加盐和哈希表示形式
//PhoneNumber = "12345678901", // 电话号码
//PhoneNumberConfirmed = true, // 指示用户是否强制验证电话号码
////NormalizedEmail = "", // 规范化电子邮件地址,允许的字符;
//Email = "2806933146@qq.com", // 邮箱号码
//EmailConfirmed = false, // 指示用户是否强制验证邮箱
//LockoutEnd = DateTime.UtcNow, // 锁定结束的日期和时间(单位:UTC)
//LockoutEnabled = false, // 指示是否需要锁定用户
//AccessFailedCount = 5, // 用户可尝试的登录失败的次数
////ConcurrencyStamp = Guid.NewGuid().ToString(), // 一个随机值,每当用户被持久化到存储时,该值必须更改
//SecurityStamp = Guid.NewGuid().ToString(), // 一个随机值,每当用户凭据更改时必须更改(密码更改、登录删除)
//TwoFactorEnabled = true // 启用了双因素身份验证。
};
#endregion 旧的配置方式-IdentityUser 结构分析
#region 新的配置方式-builder.Services.AddIdentity<IdentityUser,IdentityRole>(options =>{})
builder.Services.AddIdentity<IdentityUser,IdentityRole>(options =>
{
#region 旧的配置形式-IdentityUser
//new IdentityUser()
//{
// //PasswordHash = "", // 密码的加盐和哈希表示形式
// //PhoneNumber = "12345678901", // 电话号码
// //PhoneNumberConfirmed = true, // 指示用户是否强制验证电话号码
// ////NormalizedEmail = "", // 规范化电子邮件地址,允许的字符;
// //Email = "2806933146@qq.com", // 邮箱号码
// //EmailConfirmed = false, // 指示用户是否强制验证邮箱
// //LockoutEnd = DateTime.UtcNow, // 锁定结束的日期和时间(单位:UTC)
// //LockoutEnabled = false, // 指示是否需要锁定用户
// //AccessFailedCount = 5, // 用户可尝试的登录失败的次数
// ////ConcurrencyStamp = Guid.NewGuid().ToString(), // 一个随机值,每当用户被持久化到存储时,该值必须更改
// //SecurityStamp = Guid.NewGuid().ToString(), // 一个随机值,每当用户凭据更改时必须更改(密码更改、登录删除)
// //TwoFactorEnabled = true // 启用了双因素身份验证。
// //RequireUniqueEmail = true, // 要求Email唯一
// //AllowedUserNameCharacters ="" // 规范化用户名,允许的字符;默认是 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+
//};
#endregion 旧的配置形式-IdentityUser
// 配置用户名
options.User = new UserOptions()
{
RequireUniqueEmail = true, // 要求Email唯一
//AllowedUserNameCharacters ="" // 规范化用户名,允许的字符;默认是 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+
};
// 配置密码
options.Password =new PasswordOptions()
{
RequiredLength = 10, // 要求密码最小长度,默认是 6 个字符
RequiredUniqueChars = 3, // 要求至少要包含的字母数
RequireDigit = true, // 要求有数字
RequireUppercase = true, // 要求有大写字母
RequireLowercase = true, // 要求有小写字母
RequireNonAlphanumeric = true, // 要求有特殊字符
};
// 令牌配置
options.Tokens =new TokenOptions()
{
AuthenticatorTokenProvider = "MyAuthenticatorTokenProvider", // 认证令牌的提供者
PasswordResetTokenProvider = "MyPasswordResetTokenProvider", // 重置密码的令牌提供者
ChangeEmailTokenProvider = "MyChangeEmailTokenProvider", // 更换邮箱的令牌提供者
ChangePhoneNumberTokenProvider = "MyChangePhoneNumberTokenProvider", // 更换手机号的令牌提供者
EmailConfirmationTokenProvider = "MyEmailConfirmationTokenProvider", // 验证邮箱的令牌提供者
AuthenticatorIssuer = "Identity", // 认证的消费者
ProviderMap = new Dictionary<string, TokenProviderDescriptor>() // 将用于构造UserTokenProviders,并将密钥用作providerName
};
// 锁定账户
options.Lockout =new LockoutOptions()
{
AllowedForNewUsers = true, // 新用户锁定账户
DefaultLockoutTimeSpan = TimeSpan.FromHours(1), // 锁定时长,默认是5分钟
MaxFailedAccessAttempts = 5 // 登录错误最大尝试次数,默认5次
};
// 数据库存储
options.Stores =new StoreOptions()
{
MaxLengthForKeys = 128, // 主键的最大长度;默认为Max
ProtectPersonalData = true // 保护用户数据,要求实现 IProtectedUserStore 接口
};
// 登录认证配置
options.SignIn =new SignInOptions()
{
RequireConfirmedAccount = true, // 强制验证用户(确保用户提交了Account)
RequireConfirmedEmail = true, // 强制验证邮箱(确保用户提交了邮箱)
RequireConfirmedPhoneNumber = true // 强制验证电话号码(确保用户提交了电话号码)
};
// 声明式配置用户证件
options.ClaimsIdentity = new ClaimsIdentityOptions()
{
UserIdClaimType = "UserId", // 用户Id
UserNameClaimType = "UserName", // 用户名
RoleClaimType = "Role", // 角色
EmailClaimType = "Email", // 邮箱
SecurityStampClaimType= "SecurityStamp" // 一个随机值,每当用户凭据更改时必须更改(密码更改、登录删除)
};
});
#endregion 新的配置方式-builder.Services.AddIdentity<IdentityUser,IdentityRole>(options =>{})
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/articles/14597735.html
分类:
ASP.NETCore-中间件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
2020-03-30 使命召唤16:战区下载教程
2020-03-30 IIS-发布网站