UserManager<TUser>管理用户,如何修改identity默认hash加密算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UserManager<TUser>管理用户,如何修改identity默认hash加密算法相关的知识,希望对你有一定的参考价值。
参考技术A 项目需要做一个统一认证授权服务,于是想到identityserver4。identityserver4使用暂时不提,网上好多大神示例。在使用identityserver4做单点登录(SSO)时候有一个需求,那就是当前正在使用的系统要接入SSO。在看了好多大神示例跟着官方入门指南,噼里啪啦一顿操作猛如虎。系统弄好了,问题也来了,那就是identityserver4新系统这边使用的是UserManager<TUser>管理用户,用户加密和校验都是使用PasswordHasher,算法高端大气上档次;而老系统用户密码是使用MD5加密,老系统用户直接导入新系统也是没法用的,咋办?
1.旧系统,在用户登录时候记下明文密码,或者用明文密码通过PasswordHasher算法加密后保存下来,之后再导入SSO系统
2.修改identityserver4系统的加密算法
决定修改identityserver4系统的加密算法,但是新问题来了。新系统中使用UserManager<TUser>管理用户,如果弃用修改起来很麻烦,而且非常不友好。
网上查了下,好多人都是在UserManager<TUser>做手脚,我也从这方便寻找解决方案。
查看UserManager注册登录密码校验,都是通过这个 PasswordHasher进行。
看下这个IPasswordHasher<TUser>从何而来,从AddIdentity进去看看都有哪些
从上图可以看出, IPasswordHasher<TUser>是从在AddIdentity时候注入的。那么好办了,自定义CustomPasswordHasher<TUser> 继承字 IPasswordHasher<TUser>,然后再注入进去。
接下来看 IPasswordHasher<TUser>接口有哪些接口需要实现。
IPasswordHasher<TUser>就两个方法
1.string HashPassword(TUser user, string password) 负责加密
2.PasswordVerificationResult VerifyHashedPassword(TUser user,string hashedPassword,string providedPassword); 负责校验
新建一个类CustomPasswordHasher类,使用MD5加密,具体如下
由于identity默认是
注意这个关键词TryAddScoped,也就是说我们在AddIdentity之前之后把CustomPasswordHasher注入,都会覆盖掉默认的。如果是AddScoped,不是TryAddScoped,我们必须添加在AddIdentity之后,因为Asp.net core DI注入后面会覆盖前面的。所以在startup中,把我们自定义注入即可。
1.自定义一个CustomPasswordHasher<TUser>实现 IPasswordHasher<TUser> 接口
2.在startup中注入
以上是关于UserManager<TUser>管理用户,如何修改identity默认hash加密算法的主要内容,如果未能解决你的问题,请参考以下文章
什么是 ASP.NET Identity 的 IUserSecurityStampStore<TUser> 接口?
Store 未实现 IUserRoleStore<TUser> ASP.NET Core Identity
ASP.NET Core 标识不注入 UserManager<ApplicationUser>
ASP.NET Core Identity UserManager<ApplicationUser> -Error 没有为此对象定义无参数构造函数