PasswordHasher 方法的用户参数是什么?

Mar*_*ery 4 c# asp.net asp.net-identity .net-core asp.net-core

在非核心版本的 Identity 中,PasswordHasher是一个非泛型类型。它的HashPassword方法只需要一个参数(要散列的密码),它的VerifyHashedPassword方法只需要两个参数(之前生成的密码散列HashPassword,以及提供的密码来验证。这很棒,因为这意味着我可以PasswordHasher不用全力以赴地使用并使用整个身份框架。

Microsoft.AspNetCore.Identity,而另一方面,PasswordHasher<TUser>现在是一个通用类,以及HashPasswordVerifyHashedPassword方法采取user的参数除了先前存在的参数。这对我来说没有多大意义。为什么散列密码或验证散列需要用户对象?它是做什么用的?

Mar*_*ery 9

没有。我们可以在https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Extensions.Core/src/PasswordHasher.cs的源代码中看到,类型参数TUseruser类方法的任何参数都没有曾经使用过,在所有。

我猜测,在具有这些参数的想法IPasswordHasher<TUser>接口,允许应用程序特定的子类取决于用户。例如,我可以想象这样一种情况:在合并具有不同用户群的两个应用程序之后,应用程序最终不得不处理使用不同算法对密码进行散列处理的用户。PasswordFormat在用户模型上存储诸如字段之类的内容将允许自定义IPasswordHasher<TUser>根据用户选择要使用的散列算法。