Microsoft.Identity的IPasswordHasher加密的默认实现与运用

本文探讨了Microsoft.Identity中IPasswordHasher的默认实现,如何应用于多应用密码认证场景。当不同应用采用不同加密方式时,通过反编译源码,了解并利用默认的PasswordHasher进行密码加密和验证。强调在比较用户输入和数据库已加密密码时,应使用VerifyHashedPassword方法,即使不使用完整Identity认证系统,该加密算法也可独立使用。
摘要由CSDN通过智能技术生成

  相信了解了MS Identity认证体系的一定知道UserManager的作用,他是整个体系中的调度者,他定义了一套用户行为来帮助我们管理用户信息,角色信息,处理密码等。而其实现则在UserStore当中,我们可以实现其为我们定义的比如IUserStore,IUserPasswordStore,IRoleStore等等. 我们可以基于一整套用户行为,自定义自己的用户信息和数据结构以及数据存储。那么关于Password的Hasher,MS依然为我们提供了完整的行为定义,也由UserManager来调度。比如

1 UserManager.PasswordHasher.HashPassword(password)
PasswordHasher在UserManager接口中是这样定义的:

我原本对其默认实现是没有兴趣的,出于独立多个应用的登陆认证的目的,所以需要一个独立的用户认证项目来作为认证服务,其仅生产token,认证成功后,用户的HTTP Request Header的Authorization带着 token来访问应用服务器上的各种资源。

就是因为这样的原因,在多个应用的密码认证上出现了这样一个问题:

比如应用A采用了实现IPasswordHasher来自定义加密方式——MD5+salt的形式,而应用B则采用了Identity默认的PasswordHasher来实现,通过反编译得到如下代码:

所以为了兼容多个应用不同的加密方式,我不得不反编译出源码,拿到其默认加密方式,根据不同应用名称,来判断对密码加密或者解密,或者直接通过某种方式来对比数据库和用户输入的密码。先上MS默认的PasswordHasher具体实现

复制代码
 1 // Decompiled with JetBrains decompiler
 2 // Type: Microsoft.AspNet.Identity.Crypto
 3 // Assembly: Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 4 // MVID: E3A10FFD-023A-4BC3-AD53-32D145ABF1C9
 5 // Assembly location: C:\Sport\NewProject\V2.0\Api\Fantasy.Sport\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll
 6 
 7 using System;
 8 using
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值