在非Core版本的Identity中,PasswordHasher是非泛型类型。它的HashPassword
方法只接受一个参数(哈希的密码),而它的VerifyHashedPassword
方法只需要两个(HashPassword
之前生成的密码哈希值,以及提供的验证密码。很棒,因为这意味着我可以使用PasswordHasher
而无需全押并使用整个Identity框架。
另一方面,在Microsoft.AspNetCore.Identity
,PasswordHasher<TUser>
现在是一个通用类,HashPassword
和VerifyHashedPassword
方法另外带有user
参数到先前存在的参数。这对我来说没什么意义。为什么散列密码或验证散列需要用户对象?它用于什么?
答案 0 :(得分:4)
无。我们可以在https://github.com/aspnet/Identity/blob/dev/src/Microsoft.Extensions.Identity.Core/PasswordHasher.cs的源代码中看到,根本没有使用类型参数TUser
或类的方法的任何user
参数。
我猜想在IPasswordHasher<TUser>
接口上使用这些参数的想法是允许做的特定于应用程序的子类依赖于用户。例如,我可以想象一种情况,在两个应用程序与不同用户库合并之后,应用程序最终必须处理使用不同算法对其密码进行哈希处理的用户。在用户模型上存储类似PasswordFormat
字段的内容将允许自定义IPasswordHasher<TUser>
根据用户选择要使用的散列算法。