我编写了一个 ASP.NET Core 8.0 Web API 项目,该项目使用旧版 ASP.NET MVC 项目(在 .NET 4.6 上)的数据库。
我已成功连接身份框架,并且我正在将
IdentityUser
从数据库中拉出
builder.Services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<MydbContext>();
我知道它工作正常,因为这段代码:
public AuthenticationController(SignInManager<User> signInManager, UserManager<User> userManager)
{
_signInManager = signInManager ?? throw new ArgumentNullException(nameof(signInManager));
_userManager = userManager ?? throw new ArgumentNullException(nameof(userManager));
}
[HttpGet("Authenticate")]
public async Task<ActionResult> Authenticate(string username, string password)
{
var user = await _userManager.FindByNameAsync(username);
var check = _signInManager.CheckPasswordSignInAsync(user, password, false);
if (check.Result.Succeeded)
{
return Ok();
}
return Ok();
}
User
对象是正确的,我可以看到它包含所有正确的值。
但是当我尝试执行
CheckPasswordSignInAsync
时,它总是返回 FALSE - 即使密码正确,并且旧版 ASP.NET MVC 项目可以完美地使用它登录。
我假设它与不同的密码哈希逻辑有关,但在原始项目中我没有看到任何关于密码哈希、盐或我可以尝试复制到新应用程序中的任何类型的内容。我认为这两个应用程序都在默认值下运行
我觉得我正面临着同样的问题 这里提到了
但他们不是真正的解决方案,或者什么
注意:我也尝试添加这个,但没有帮助
builder.Services.Configure<PasswordHasherOptions>(options => options.CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV2);
我正在使用而不是CheckPasswordSignInAsync
var check = _userManager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, Password);
返回一个
PasswordVerificationResult.Success