在非核心版本的Identity中,PasswordHaser是一种非泛型类型。它的HashPassword
方法采用单个参数(要哈希的密码),其VerifyHashedPassword
方法仅采用两个参数(之前由HashPassword
生成的密码哈希和提供的密码进行验证。这很棒,因为这意味着我可以使用PasswordHasher
,而无需全力以赴并使用整个标识框架。
另一方面,在Microsoft.AspNetCore.Identity
中,PasswordHasher<TUser>
现在是一个泛型类,HashPassword
和VerifyHashedPassword
方法除了以前存在的参数外,还采用user
参数。这对我来说没有多大意义。为什么哈希密码或验证哈希需要用户对象?它的用途是什么?
什么都没有。我们可以在 https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Extensions.Core/src/PasswordHasher.cs 的源代码中看到,类型参数TUser
和类方法的任何user
参数都没有使用过。
我猜想在IPasswordHasher<TUser>
接口上使用这些参数的想法是允许依赖于用户的特定于应用程序的子类。例如,我可以想象这样一种情况:在合并两个具有不同用户群的应用程序后,应用程序最终不得不处理使用不同算法对密码进行哈希处理的用户。在用户模型上存储类似PasswordFormat
字段的内容将允许自定义IPasswordHasher<TUser>
根据用户选择要使用的哈希算法。