(此花无日不春风)
其实IdentityServer4的小项目已经基本完结了,但是我总感觉还是有很多东西没有深入挖掘和研究的,这不,二群里有小伙伴问到了一个常见的问题,因为我去年都见到了,一直没有想过去解决它,花了半个小时研究代码和搜索资料后,基本解决了,分享出来,让更多的人了解,这是一个小品文,不会讲原理,一笔带过,就说说如何操作即可。
1、问题的由来
其实这个问题很简单,我相信任何做过Ids4授权认证的都应该遇到过,其实准确来说是用过微软官方Identity类库的应该遇到过,就是注册的时候,提示强密码策略,奇烦:
相信你一看就能明白,官方默认的密码是强密码策略,要英文,数字,大小写,特殊符号,而且昵称、姓名,还只能是字母和数据,怎么看就不舒服,虽然我也一直坚持了很长时间,那有没有办法修改下呢,还真的有。
其实好的框架就是这样的,有限制就会有配置,这才是好的框架,那关键是如何修改这个配置,其实很简单,这里有两种方案,你任意使用即可。
2、如何修改默认配置
1、AddIdentity 内配置
我就直接上代码了,都有注释:
代码语言:javascript复制 services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
options.User = new UserOptions
{
RequireUniqueEmail = true, //要求Email唯一
AllowedUserNameCharacters = null //允许的用户名字符,null表示不限制
};
options.Password = new PasswordOptions
{
RequiredLength = 8, //要求密码最小长度,默认是 6 个字符
RequireDigit = true, //要求有数字
RequiredUniqueChars = 3, //要求至少要出现的字母数
RequireLowercase = true, //要求小写字母
RequireNonAlphanumeric = false, //要求特殊字符
RequireUppercase = false //要求大写字母
};
options.Lockout = new LockoutOptions
{
AllowedForNewUsers = true, // 新用户锁定账户
DefaultLockoutTimeSpan = TimeSpan.FromHours(1), //锁定时长,默认是 5 分钟
MaxFailedAccessAttempts = 3 //登录错误最大尝试次数,默认 5 次
};
options.SignIn = new SignInOptions
{
RequireConfirmedEmail = true, //要求激活邮箱
RequireConfirmedPhoneNumber = true //要求激活手机号
};
options.ClaimsIdentity = new ClaimsIdentityOptions
{
// 这里都是修改相应的Cliams声明的
RoleClaimType = "IdentityRole",
UserIdClaimType = "IdentityId",
SecurityStampClaimType = "SecurityStamp",
UserNameClaimType = "IdentityName"
};
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
你要是看不懂,那可就是真的底子太薄了,需要恶补了。
我现在是有以下几个规则:
1、不对用户名进行限制,可以是中文;
2、密码只需要小写英文和数字即可;
3、长度至少是八位;
其他的,我就放开了,这样比较人性化一点,当然,如果你感觉这么配置不好看,也可以用这种方案。
2、单独配置
具体的我就不解释了,和上边的都一样,只不过是单独拎出来了:
代码语言:javascript复制 services.Configure<IdentityOptions>(
options =>
{
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
options.User.AllowedUserNameCharacters = null;
});
3、结果展示
效果还是很明显的,最后也是注册成功:
(登录页)
(昵称显示)
当然,这只是冰山一角,还有很多很多的问题需要挖掘,比如:
1、注册的时候,可以不用密码加密么,或者自定义加密;
2、完整的修改密码流程是什么;
3、如何添加第三方的登录方式;
等等等等。
未来还是有很多路要走,加油!