一、序言

  Identity:身份组件库;使用管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等。

二、常用成员(WebAPI;无UI)

1、部分方法(知道即可;我的框架中没有用这些)

  全部方法见: Microsoft.AspNetCore.Identity 命名空间

//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。
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
2、ClaimsPrincipal-记录用户身份(重点):
  • ClaimsPrincipal:证件持有者;ClaimsPrincipal 是 ClaimsIdentity 的持有者,就像我们拥有身份证一样。可以包含多个的 ClaimsIdentity。
  • ClaimsIdentity:证件;所有的 Claim身份信息 最终组成了我们的 身份证ClaimsIdentity。
  • Claims:每一项的证件信息;可以存放我们的姓名、性别、民族、出生日期、家庭住址、身份证号等身份信息,每一项数据的都可以看成是 type-value(数据类型-数据值)。
(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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
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 =>{})
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.

 

作者:꧁执笔小白꧂