_userManager.检查密码异步在网络核心 3.1 中引发异常



我正在尝试在.NET Core 3.1中使用用户管理器,但以下代码:

public async Task<bool> CheckPassword(User user, string password)
{
var appUser = _mapper.Map<AppUser>(user);
return await _userManager.CheckPasswordAsync(appUser, password);
}

引发此异常:

输入不是有效的 Base-64 字符串,因为它包含非 base-64 字符、两个以上的填充字符或非法字符 在填充字符中

堆栈跟踪:

at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength( at System.Convert.FromBase64String(String s( at Microsoft.AspNetCore.Identity.PasswordHasher1.VerifyHashedPassword(TUser user, String hashedPassword, String providedPassword) at Microsoft.AspNetCore.Identity.UserManager

这很奇怪,因为 .Net Core 2 中的数据库中具有相同哈希的相同代码运行良好。 任何想法问题出在哪里?

编辑:

我找到了这个文件:https://github.com/dotnet/aspnetcore/blob/e276c8174b8bfdeb70efceafa81c75f8badbc8db/src/Identity/Extensions.Core/src/PasswordHasher.cs

看起来问题就在这里:

public virtual PasswordVerificationResult VerifyHashedPassword(TUser user, string hashedPassword, string providedPassword)
{
if (hashedPassword == null)
{
throw new ArgumentNullException(nameof(hashedPassword));
}
if (providedPassword == null)
{
throw new ArgumentNullException(nameof(providedPassword));
}
byte[] decodedHashedPassword = Convert.FromBase64String(hashedPassword);

但是我试图通过 https://base64.guru/tools/validator 及其 Ok 来验证数据库中的哈希。

您需要保存散列密码,或者需要重写 CheckPassword 方法以进行手动检查。

默认情况下,系统会检查散列密码,并且您正在传递纯文本。

相关内容

  • 没有找到相关文章

最新更新