首页 > 解决方案 > 由于 AspNet 核心身份中的密码不匹配,确保签名失败的正确方法是什么

问题描述

我有基于 JWTBearer 的身份验证。我面临的问题是,当签名失败时,它只是 return result.Succeeded=false。但是我找不到确保失败原因是密码不匹配的方法,因为当电子邮件未确认或用户被锁定时返回相同的结果。作为一种解决方法,如果失败原因不是提供的属性之一,Result那么我认为它是密码不匹配。这是代码,

GenericApiErrorCollection errors = new GenericApiErrorCollection(); 
var user = await _signInManager.UserManager.Users.SingleOrDefaultAsync
            (x => x.NormalizedUserName == loginUser.UserName.ToUpperInvariant());

if (user == null)
{
   errors.AddError(ErrorResponsCodes.UserDoesnotExist);
}
else
{
   var result = await _signInManager.CheckPasswordSignInAsync(user, loginUser.Password, false);
   if (result.Succeeded)
   {
       var token = AccessTokenFor(user);
       var refreshToken = await RefreshTokenForAsync(user, loginUser.ClientId);
       return Ok(new { token, refreshToken });
   }
   else
   {
       if (result.IsLockedOut)
       {
            errors.AddError(ErrorResponsCodes.UserLockedOut);
       }
       else if (result.IsNotAllowed)
       {
            errors.AddError(ErrorResponsCodes.UserNotAllowed);
       }
       else if (result.RequiresTwoFactor)
       {
            errors.AddError(ErrorResponsCodes.UserRequiresTwoFactor);
       }
       else
       {
            errors.AddError(ErrorResponsCodes.UserNamePasswordDoesntMatch);       
       }
    }

}

返回 BadRequest(错误);

标签: c#.net-coreasp.net-identity

解决方案


“但我找不到确保失败原因是密码不匹配的方法,”

因为你不。最好的做法是说“您无法登录”。时期。UI 明智地说“密码错误或用户不存在”。

如果您说“密码不匹配”,则表示您确认用户名有效——这实际上意味着我可以检查用户名或电子邮件,从而了解更多将附件重定向到的位置。


推荐阅读